List<T>.ForEach 调用异步方法的意外
有这么个异步方法
private static async Task<int> Compute(int s)
{
return await Task<int>.Run(() =>
{
if (s < 5)
return s * 2;
else
return s * 3;
});
}
当然实际过程是从数据库获取或者从网络上获取什么内容。
现在我想调用:
private static void Main(string[] args)
{
List<int> s = new List<int> { 1, 2, 3, 4, 5 };
List<int> t = new List<int>();
s.ForEach(ii =>
{
int ret = await Compute(ii);
t.Add(ret);
});
t.ForEach(ii => Console.WriteLine(ii));
}
发现 vs 划了一条下划线
OK,await 必须 async的,简单,改一下
private static void Main(string[] args)
{
List<int> s = new List<int> { 1, 2, 3, 4, 5 };
List<int> t = new List<int>();
s.ForEach(async ii =>
{
int ret = await Compute(ii);
t.Add(ret);
});
t.ForEach(ii => Console.WriteLine(ii));
}
然后,Ctrl+F5运行,报错了!

错误在
t.ForEach(ii => Console.WriteLine(ii));
原因在:Foreach 调用了一个 async void 的Action,没有await(也没法await,并且await 没返回值的也要设成Task,没法设)
老老实实改成 foreach(var ii in s)。
List<T>.ForEach 调用异步方法的意外的更多相关文章
- JavaScript日历控件开发 C# 读取 appconfig文件配置数据库连接字符串,和配置文件 List<T>.ForEach 调用异步方法的意外 ef 增加或者更新的习惯思维 asp.net core导入excel 一个二级联动
JavaScript日历控件开发 概述 在开篇之前,先附上日历的代码地址和演示地址,代码是本文要分析的代码,演示效果是本文要实现的效果代码地址:https://github.com/aspwebc ...
- 又踩.NET Core的坑:在同步方法中调用异步方法Wait时发生死锁(deadlock)
之前在将 Memcached 客户端 EnyimMemcached 迁移 .NET Core 时被这个“坑”坑的刻骨铭心(详见以下链接),当时以为只是在构造函数中调用异步方法(注:这里的异步方法都是指 ...
- 一码阻塞,万码等待:ASP.NET Core 同步方法调用异步方法“死锁”的真相
在我们 2015 年开始的从 .NET Framework 向 .NET Core 迁移的工程中,遇到的最大的坑就是标题中所说的--同步方法中调用异步方法发生"死锁".虽然在 .N ...
- 同步调用异步方法how-would-i-run-an-async-taskt-method-synchronously
同步调用异步方法帮助类: public static class AsyncHelpers { /// <summary> /// Execute's an async Task<T ...
- ABP .Net Core 调用异步方法抛异常A second operation started on this context before a previous asynchronous operation completed
1. 问题描述 最近使用ABP .Net Core框架做一个微信开发,同时采用了一个微信开发框架集成到ABP,在微信用户关注的推送事件里调用了一个async 方法,由于没有返回值,也没做任何处理,本 ...
- async await 同步方法调用异步方法死锁
同步方法调用异步方法.GetAwaiter().GetResult()计算函数超时,异步方法所有的回调操作都会期望返回到主线程. 所以会导致各种线程死锁.异步方法中使用ConfigureAwait(f ...
- .NET中如何在同步代码块中调用异步方法
更新记录 本文迁移自Panda666原博客,原发布时间:2021年7月2日. 在同步代码块中调用异步方法,方法有很多. 一.对于有返回值的Task 在同步代码块中直接访问 Task 的 Result ...
- C#-等待异步函数执行结果-将调用异步方法的函数变成非异步执行
先来简单了解一下async.await 使用async await 的前提条件:需要C# 5.0以上版本 .NET Framework 4.5以上 Visual Studio 2012以上. asyn ...
- 【转】.NET 4.5 使用async和await关键字调用异步方法
async和await关键字是.NET 4.5新增加的异步编程方式,通过使用这两个关键字可以轻松便捷的编写异步方法.使用async关键字声明异步方法,使用await关键字等待和获取异步方法返回的结果. ...
随机推荐
- Unity3d外包—就找北京动点软件(长年承接Unity3d软件、游戏项目外包)
承接Unity3d体感企业项目.游戏项目外包 北京公司.专业团队,成员为专业Unity3d产品公司一线开发人员,有大型产品开发经验: 提供优质的售后服务,保证产品质量,轻量级产品可以提供规范清晰的源代 ...
- SQL Server 视图(仅代码及练习)
use electric go --建立供电局1#仓库所存放物资的视图. create view s1_stock as select * from stock where warehouse='供电 ...
- Java并发编程的挑战
并发编程的目的是为了让程序运行得更快,但是,并不是线程启动的越多,就能让程序最大限度地并发执行.并发编程时,会面临非常多的挑战,比如上下文切换的问题,死锁的问题,以及受限于各种硬件和软件的资源限制问题 ...
- CSS3 3D图片立方体旋转
html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <titl ...
- [Windows]卸载Office 2016密钥
cscript "C:\Program Files (x86)\Microsoft Office\Office16\ospp.vbs" /dstatus BTDRB
- 初识Log4Net
刚刚了解log4net,根据自己的理解翻译了一下比较重要的东西.详细状况请见log4net官方网站 log4net是一种帮助程序员将日志语句输出到各种目标文件的输出工具,有了log4net,就可以在运 ...
- zabbix报错gd、freetype、png、jpeg
安装包位置:http://www.p-pp.cn/app/zabbix/ 1.安装freetype [root@localhost softs]# tar xf freetype-2.5.0.tar. ...
- C#数组--(一维数组,二维数组的声明,使用及遍历)
数组:是具有相同数据类型的一组数据的集合.数组的每一个的变量称为数组的元素,数组能够容纳元素的数称为数组的长度. 一维数组:以线性方式存储固定数目的数组元素,它只需要1个索引值即可标识任意1个数组元素 ...
- Java中Object类的方法笔记
今天看了下Object类的源码,以下是我看源码的一些笔记,欢迎有小伙伴来补充~ 首先列举下几个主要方法(面试被问到过的): equals:这个主要是用于比较对象的,Object中比较的是比较原始的,直 ...
- socket应用(vue、node.js、M站)
socket应用(vue.node.js.M站) 前言:我们在做一些项目的时候需要做到实时变化, 比如我们有时候有需求会要求我们做一个类似于聊天室的页面 比如有些时候我们对某些东西进行点赞和刷票,需要 ...