45

いつasync/awaitを使用する必要があり、いつC#でparallel.foreachを使用する必要がありますか?parallelとasync/awaitは同じ目的を果たしますか?それらの違いは何ですか?

4

1 に答える 1

114

async/await はasynchronyに関するものですが、これはparallelismParallel.ForEachに関するものです。これらは関連する概念ですが、同じではありません。

Parallel.ForEachコレクション内のすべてのアイテムに対して同じ操作を並行して実行し、すべての操作が完了するまで現在のスレッドをブロックする場合に使用されます。

async/await は、特定の非同期操作が完了するまで現在の操作を続行できないが、現在のスレッドをブロックしたくない場合に使用されます。これは、次の 2 つの状況で特に役立ちます。

  • 基本的に、UI スレッドでさまざまな非同期操作を次々に開始するコードを記述し、操作の合間に UI に短時間アクセスします。(それよりも一般的ですが、これは単純な例です。) UI スレッドをブロックしたくはありませんが、これらの非同期操作をすべて管理するのは面倒です。
  • Web サーバーなどで、一度に多くの長時間実行される操作を処理する。個々のリクエストは、他の Web サービスやデータベースなどを呼び出すために時間がかかる場合がありますが、スレッドは比較的高価なリソースであるため、リクエストごとに 1 つのスレッドを使用することは望ましくありません。

を呼び出す新しいタスクを開始し、そのタスクを待機することで、並列処理と非同期を組み合わせることができParallel.ForEachます。(あくまで一例です。)

于 2012-12-31T09:04:19.837 に答える