一个简单的列子,需要把一个集合的数据添加到数据库中。

我先这样写了,然后报错了

     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相关推荐

  1. node mysql await_node.js中对 mysql 进行增删改查等操作和async,await处理

    要对mysql进行操作,我们需要安装一个mysql的库. 一.安装mysql库 npm install mysql --save 二.对mysql进行简单查询操作 const mysql = requ ...

  2. 多线程编程学习笔记——async和await(三)

    接上文 多线程编程学习笔记--async和await(一) 接上文 多线程编程学习笔记--async和await(二) 五.   处理异步操作中的异常 本示例学习如何在异步函数中处理异常,学习如何对多 ...

  3. node.js中对 mysql 进行增删改查等操作和async,await处理

    要对mysql进行操作,我们需要安装一个mysql的库. 一.安装mysql库 npm install mysql --save 二.对mysql进行简单查询操作 const mysql = requ ...

  4. 关于async与await的FAQ 转

    (译)关于async与await的FAQ 传送门:异步编程系列目录-- 环境:VS2012(尽管System.Threading.Tasks在.net4.0就引入,在.net4.5中为其增加了更丰富的 ...

  5. async 和 await 之异步编程的学习

    async修改一个方法,表示其为异步方法.而await表示等待一个异步任务的执行.js方面,在es7中开始得以支持:而.net在c#5.0开始支持.本文章将分别简单介绍他们在js和.net中的基本用法 ...

  6. 【转】2.1(译)关于async与await的FAQ

    传送门:异步编程系列目录-- 环境:VS2012(尽管System.Threading.Tasks在.net4.0就引入,在.net4.5中为其增加了更丰富的API及性能提升,另外关键字"a ...

  7. 那些年我们一起追逐的多线程(Thread、ThreadPool、委托异步调用、Task/TaskFactory、Parallerl、async和await)

    一. 背景 在刚接触开发的头几年里,说实话,根本不考虑多线程的这个问题,貌似那时候脑子里也有没有多线程的这个概念,所有的业务都是一个线程来处理,不考虑性能问题,当然也没有考虑多线程操作一条记录存在的并 ...

  8. JS - 15 - 异步、Promise、async、await

    Promise 类似 java 的 Callable then 方法 类似 java 的 Future 下一篇: <JS - 16 - 任务调度.宏任务.微任务.轮询> PromiseA+ ...

  9. JS循环中使用async、await的正确姿势

    概览(循环方式 - 常用) for map forEach filter 声明遍历的数组和异步方法 声明一个数组:⬇️ const skills = ['js', 'vue', 'node', 're ...

最新文章

  1. goland 远程调试go_手把手教你学Go语言,基础环境配置和Hello World
  2. 智能家居数据库设计_设计更智能的数据表
  3. MFC消息响应机制及映射机制理解
  4. 缓存击穿、缓存失效及热点key的解决方案
  5. 7-7 列出叶结点 (10 分)
  6. python入门代码-Python入门学习系列——Python代码测试
  7. Win Server 2012 R2 安装SQL 2016先决条件
  8. 计算机怎么新建word文档,右键新建没有word文档怎么办?Win10新建word文档的方法...
  9. CMOS图像传感器内部结构及工作原理
  10. Java模拟物流快递系统程序设计(此题仅仅实现类的继承与多态,后续增加接口部分)
  11. 电脑提示Wtautoreg.exe无法找到入口怎么解决?
  12. vscode中使用md文件
  13. 【GitHub】GitHub上值得收藏的100个精选前端项目!
  14. android环绕耳机,完全不同的“听音辨位”体验——罗技G433 7.1环绕声游戏耳机使用体验...
  15. 1 C语言的基本知识
  16. linux清除历史linux清除history
  17. android手机网速,安卓手机网速慢怎么办 安卓手机网速慢解决办法【详解】
  18. 在word中怎么把图片转换成文字格式
  19. django的优缺点
  20. SH-SSS丨面向有声读物的跨说话人语音风格迁移

热门文章

  1. GS使用HTTPS登录的设置过程
  2. 20150206--JS巩固与加强4-02
  3. js实现图片上传预览及进度条
  4. 基于 OpenFire 的TVBox管理平台开发笔记
  5. 博弈论——关于Nim游戏和SG函数的几个链接
  6. 手撸移动端轮播图(内含源码)
  7. 有赞美业微前端的落地总结
  8. javascript --- 堆栈内存与闭包的作用
  9. Python数据分析之pandas入门
  10. 2017-5-4 进程