VSO*_*VSO 5 c# asynchronous async-await
我遇到了这段代码:
items.ForEach(async item =>
{
doSomeStuff();
await mongoItems.FindOneAndUpdateAsync(mongoMumboJumbo);
await AddBlah(SqlMumboJumbo);
});
Run Code Online (Sandbox Code Playgroud)
使这个.forEach委托有任何意义,还是只是一个正常的foreach循环?只要包含循环的函数是异步的,默认情况下这是异步的吗?
收到的代表ForEach是Action<T>:
public void ForEach(Action<T> action)
Run Code Online (Sandbox Code Playgroud)
这意味着,您在其中使用的任何异步委托将有效地转变为async void方法.这些都是"一劳永逸"的执行方式.这意味着你的foreach不会在继续调用列表中下一个项目的委托之前异步等待,这可能是一个不受欢迎的行为.
请foreach改为使用常规.
旁注 - Eric Lippert的foreach VS ForEach,伟大的博客文章.