我怎样才能等到Parallel.ForEach完成


122

我在当前项目中使用TPL,并使用Parallel.Foreach旋转许多线程。Task类包含Wait(),以等待任务完成。这样,我如何等待Parallel.ForEach完成然后执行下一条语句?

Answers:


191

您不必做任何特殊的事情,Parallel.Foreach()将等到其所有分支任务完成。在调用线程中,您可以将其视为单个同步语句,例如将其包装在try / catch中。


10
在某些情况下,“ Parallel.Foreach()将等待直到所有分支任务完成”,例如(内部的异步任务):Parallel.ForEach(groupedUnreadMessages,async unreadMsgCollection => {/ * works * /});
胡博

这里是一个计算器的其他问题:stackoverflow.com/questions/11564506/...
胡波

4
这个答案来自async / await之前的2011年。但是就像我说的那样,在ForEach中生成线程不是一个好主意。也不是异步动作。您发布的链接提供了良好的信息和解决方案。
亨克·霍尔特曼

1
您可以扩展“在ForEach内部生成线程不是一个好主意”吗?那是“除非您确保返回之前等待”?
Gianthra

16

使用Parallel.Foreach并不需要它:它仅在可用处理器数量尽可能多的线程中执行foreach,但它会同步返回。

更多信息可以在这里找到

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.