C# foreach遇到async和await
一个简单的列子,需要把一个集合的数据添加到数据库中。
我先这样写了,然后报错了
public async Task<IHttpActionResult> Test([FromUri]string name = ""){List<string> strList = new List<string>() { "测试", "测试1", "测试2", "测试3", "测试4", "测试5", "测试6", "测试7", "测试8" };strList.ForEach(async x =>{JkSystemname jk = await dbOracle.JkSystemnames.AsQueryable().FirstAsync(ee => ee.Name == x);if (jk == null){jk = new JkSystemname() { Name = x };dbOracle.JkSystemnames.Insert(jk);}});return await Task.FromResult(Ok(new { errcode = 0, errmag = "success" }));}
两个办法解决循环里面不能使用异步
①把方法提出来,然后返回task,然后一起执行,这样不会按顺序执行
public async Task<IHttpActionResult> Test([FromUri]string name = ""){List<string> strList = new List<string>() { "测试", "测试1", "测试2", "测试3", "测试4", "测试5", "测试6", "测试7", "测试8" };IEnumerable<Task> tasks = strList.Select(x => TestAsync(x));//映射到一个可以遍历的taskawait Task.WhenAll(tasks); //使用task.whenall 完成return await Task.FromResult(Ok(new { errcode = 0, errmag = "success" }));}/// <summary>/// 根据传入的名称,返回需要执行的task代码/// </summary>/// <param name="name"></param>/// <returns></returns>public async Task TestAsync(string name){JkSystemname jk = await dbOracle.JkSystemnames.AsQueryable().FirstAsync(ee => ee.Name == name);if (jk == null){jk = new JkSystemname() { Name = name };dbOracle.JkSystemnames.Insert(jk);}}
②扩展方法,一个个的执行
/// <summary>/// 使用异步遍历处理数据/// </summary>/// <typeparam name="T">需要遍历的基类</typeparam>/// <param name="list">集合</param>/// <param name="func">Lambda表达式</param>/// <returns></returns>public static async Task ForEachAsync<T>(this List<T> list, Func<T, Task> func){foreach (T value in list){await func(value);}}
public async Task<IHttpActionResult> Test([FromUri]string name = ""){List<string> strList = new List<string>() { "测试", "测试1", "测试2", "测试3", "测试4", "测试5", "测试6", "测试7", "测试8" };//①先得到集合,然后一起执行//IEnumerable<Task> tasks = strList.Select(x => TestAsync(x));//映射到一个可以遍历的task//await Task.WhenAll(tasks); //使用task.whenall 完成//②一步一步的循环await strList.ForEachAsync<string>(async x =>{JkSystemname jk = await dbOracle.JkSystemnames.AsQueryable().FirstAsync(ee => ee.Name == x);if (jk == null){jk = new JkSystemname() { Name = x };dbOracle.JkSystemnames.Insert(jk);}});return await Task.FromResult(Ok(new { errcode = 0, errmag = "success" }));}
转载于:https://www.cnblogs.com/Sea1ee/p/10624769.html
C# foreach遇到async和await相关推荐
- node mysql await_node.js中对 mysql 进行增删改查等操作和async,await处理
要对mysql进行操作,我们需要安装一个mysql的库. 一.安装mysql库 npm install mysql --save 二.对mysql进行简单查询操作 const mysql = requ ...
- 多线程编程学习笔记——async和await(三)
接上文 多线程编程学习笔记--async和await(一) 接上文 多线程编程学习笔记--async和await(二) 五. 处理异步操作中的异常 本示例学习如何在异步函数中处理异常,学习如何对多 ...
- node.js中对 mysql 进行增删改查等操作和async,await处理
要对mysql进行操作,我们需要安装一个mysql的库. 一.安装mysql库 npm install mysql --save 二.对mysql进行简单查询操作 const mysql = requ ...
- 关于async与await的FAQ 转
(译)关于async与await的FAQ 传送门:异步编程系列目录-- 环境:VS2012(尽管System.Threading.Tasks在.net4.0就引入,在.net4.5中为其增加了更丰富的 ...
- async 和 await 之异步编程的学习
async修改一个方法,表示其为异步方法.而await表示等待一个异步任务的执行.js方面,在es7中开始得以支持:而.net在c#5.0开始支持.本文章将分别简单介绍他们在js和.net中的基本用法 ...
- 【转】2.1(译)关于async与await的FAQ
传送门:异步编程系列目录-- 环境:VS2012(尽管System.Threading.Tasks在.net4.0就引入,在.net4.5中为其增加了更丰富的API及性能提升,另外关键字"a ...
- 那些年我们一起追逐的多线程(Thread、ThreadPool、委托异步调用、Task/TaskFactory、Parallerl、async和await)
一. 背景 在刚接触开发的头几年里,说实话,根本不考虑多线程的这个问题,貌似那时候脑子里也有没有多线程的这个概念,所有的业务都是一个线程来处理,不考虑性能问题,当然也没有考虑多线程操作一条记录存在的并 ...
- JS - 15 - 异步、Promise、async、await
Promise 类似 java 的 Callable then 方法 类似 java 的 Future 下一篇: <JS - 16 - 任务调度.宏任务.微任务.轮询> PromiseA+ ...
- JS循环中使用async、await的正确姿势
概览(循环方式 - 常用) for map forEach filter 声明遍历的数组和异步方法 声明一个数组:⬇️ const skills = ['js', 'vue', 'node', 're ...
最新文章
- goland 远程调试go_手把手教你学Go语言,基础环境配置和Hello World
- 智能家居数据库设计_设计更智能的数据表
- MFC消息响应机制及映射机制理解
- 缓存击穿、缓存失效及热点key的解决方案
- 7-7 列出叶结点 (10 分)
- python入门代码-Python入门学习系列——Python代码测试
- Win Server 2012 R2 安装SQL 2016先决条件
- 计算机怎么新建word文档,右键新建没有word文档怎么办?Win10新建word文档的方法...
- CMOS图像传感器内部结构及工作原理
- Java模拟物流快递系统程序设计(此题仅仅实现类的继承与多态,后续增加接口部分)
- 电脑提示Wtautoreg.exe无法找到入口怎么解决?
- vscode中使用md文件
- 【GitHub】GitHub上值得收藏的100个精选前端项目!
- android环绕耳机,完全不同的“听音辨位”体验——罗技G433 7.1环绕声游戏耳机使用体验...
- 1 C语言的基本知识
- linux清除历史linux清除history
- android手机网速,安卓手机网速慢怎么办 安卓手机网速慢解决办法【详解】
- 在word中怎么把图片转换成文字格式
- django的优缺点
- SH-SSS丨面向有声读物的跨说话人语音风格迁移