我遇到了这段代码:
items.ForEach(async item =>
{
doSomeStuff();
await mongoItems.FindOneAndUpdateAsync(mongoMumboJumbo);
await AddBlah(SqlMumboJumbo);
});
使其成为 .forEach 委托有什么意义,或者它可能只是一个普通的 foreach 循环?只要包含循环的函数是异步的,默认情况下这就是异步的?
代表收到的ForEach
is an Action<T>
:
public void ForEach(Action<T> action)
这意味着,您在其中使用的任何异步委托都将有效地变成async void
方法。这些都是“即发即忘”的执行方式。这意味着您的 foreach 在继续调用列表中下一项的委托之前不会完成异步等待,这可能是不希望的行为。
使用常规foreach
反而。
边注 -foreach VS ForEach http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx作者:Eric Lippert,很棒的博客文章。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)