Parallel.ForEachが完了するまで待機するにはどうすればよいですか?


122

現在のプロジェクトではTPLを使用しており、Parallel.Foreachを使用して多くのスレッドをスピンしています。Taskクラスには、タスクが完了するまで待機するWait()が含まれています。そのように、Parallel.ForEachが完了するのを待ってから、次のステートメントを実行する方法を教えてください。

回答:


192

特別なことをする必要はありませんParallel.Foreach()。分岐されたタスクがすべて完了するまで待機します。呼び出しスレッドから、それを単一の同期ステートメントとして扱い、たとえば、try / catch内にラップできます。


10
「Parallel.Foreach()は、すべての分岐タスクが完了するまで待機します」((内部の非同期タスク)などの状況では混乱する可能性があります:Parallel.ForEach(groupedUnreadMessages、async unreadMsgCollection => {/ * works * /});
Bo HU 2016

これは、stackoverflowの他の問題です。stackoverflow.com/ questions
Bo HU

4
この回答は、非同期/待機の前の2011年からです。しかし、私が言ったように、ForEach内にスレッドを生成することは良い考えではありません。どちらも非同期アクションではありません。あなたが投稿したリンクは良い情報と解決策を提供します。
Henk Holterman

1
「ForEach内にスレッドを生成するのは良い考えではありません」展開できますか?それは「あなたが戻る前に待つことを確認しない限り」ですか?
Gianthra

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.