2011-10-04 20 views
4

我想取一組對象並在其上運行一個例程。順序無關緊要,它們都是獨立的操作,所以我想我會打電話給ParallelForEach上的集合。但是我想完成一切後續的事情。如何在完成後跟進Parallel.ForEach?

ContinueWith等效的或ForEach的超負荷在哪裏需要另一個動作/任務完成運行?我堅持投票ParallelLoopResultIsCompleted價值,直到它回來真實?

ContinueWhenAll方法始終需要一個任務數組。我應該將這組對象投影到每個新的任務中嗎?那麼我將如何同時啓動一組任務並行?

This question是類似的,但是我相信老3.5 TPL擴展。如果需要的話,我打開任務並行庫之外的解決方案。

回答

8

Parallel.ForEach阻塞,直到完成,所以你可以做任何你需要的方法調用後。

+0

所以我應該在父任務內啓動一個Parallel.ForEach以避免在UI線程上運行它?然後繼續在父任務上? –

+0

@Yadyn:可能,是的。這應該工作。當然,在C#5中,使用異步和等待會更容易... –

+0

@JonSkeet在4.5中有更改的行爲嗎?因爲當我開始使用Parallel.Foreach時,它會完成部分工作(或者沒有任何工作),然後繼續執行在循環後編寫的代碼,然後繼續工作 – chester89

相關問題