List<T>.ForEach 调用异步方法的意外
2024-09-22 14:52:56
有这么个异步方法
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)。
最新文章
- windows命令——taskkill
- SCALA XML pattern attrbute(属性)
- JQ对象到底是什么
- 解决Ubuntu Server 12.04 在Hyper-v 2012 R2中不能使用动态内存的问题
- Android Studio构建系统基础
- Debug阶段成员贡献分
- javascript解析引擎(每天有学习一点篇)
- 移植UE4的模型操作到Unity中
- 40. 特殊a串数列求和
- 树莓派最简易Wifi配置
- Visual Studio 扩展包(.vsix)制作
- SQL UNION 和 UNION ALL 操作符
- neu1458 方格取数 dp解法
- What is WCF
- 系统预定义委托与Lambda表达式
- Windows 下让 Python 多个版本共存(支持 pip)
- HTML5中表单中新增加元素
- 动态的加载显示oracle警告日志文件内容
- 关于在虚拟机上安装ubuntu输入不了中文的问题
- vue手把手教你实现走马灯商品左右轮播图