2011-10-25 143 views
78

我在當前項目中使用TPL並使用Parallel.Foreach來旋轉很多線程。 Task類包含Wait()以等待任務完成。那樣,我該如何等待Parallel.ForEach完成,然後再執行下一個語句?我該如何等待Parallel.ForEach完成

回答

132

您不必做任何特殊的事情,Parallel.Foreach()將等待,直到其所有分支任務完成。在調用線程中,您可以將其視爲單個同步語句,並將其封裝在try/catch中。

+2

「Parallel.Foreach()將等到所有分支任務完成」,它可以在某些情況下混淆,如(異步任務內):Parallel.ForEach(groupedUnreadMessages, async unreadMsgCollection => {/ * works * /}); –

+0

這裏是其他問題在stackoverflow:http://stackoverflow.com/questions/11564506/nesting-await-in-parallell-foreach –

+1

這個答案是從2011年,在async/await之前。但正如我所說的,在ForEach內部產生線程並不是一個好主意。也不是一個異步行動。您發佈的鏈接提供了很好的信息和解決方案。 –

11

在Parallel.Foreach中不需要這麼做:它只在與可用處理器一樣多的線程中執行foreach,但它會同步返回。

的更多信息,可以發現here

+9

它使用的(最大)線程數並不那麼簡單。 –