C#でasync/awaitをいつ使用し、parallel.foreachをいつ使用すればよいですか?並列と非同期/待機は同じ目的を果たしますか?それらの違いは何ですか?
async/awaitは約非同期ですが、Parallel.ForEach
は約並列処理です。それらは関連する概念ですが、同じではありません。
Parallel.ForEach
は、コレクション内のすべてのアイテムに対して同じ操作を並行して実行し、すべての操作が完了するまで現在のスレッドをブロックする場合に使用されます。
async/awaitは、特定の非同期操作が完了するまで現在の操作がこれ以上進行できないが、現在のスレッドをブロックしたくない場合に使用されます。これは、次の2つの状況で特に役立ちます。
Parallel.ForEach
を呼び出す新しいタスクを開始し、そのタスクを待機することで、並列処理と非同期を組み合わせることができます。 (ちょうど一例として。)