C# で複数の非同期タスクを効率的に実行する
非同期コードを扱う場合、複数のタスクを同時に実行する最も効率的な方法を選択することが重要です。この記事では、これを実現する 2 つの一般的な方法、Parallel.ForEach
と Wait()
および Task.WaitAll()
の組み合わせについて説明します。
Parallel.ForEach と Wait() を使用する
Parallel.ForEach()
と Wait()
を組み合わせると、複数のタスクを並行して開始できますが、タスクが完了するまで参加している各スレッドはブロックされます。このアプローチは、各スレッドが長時間アイドル状態になるため、ネットワーク操作に長時間かかる場合には非効率的です。
Task.WaitAll() を使用する
Task.WaitAll()
も、すべてのタスクが完了するまで現在のスレッドをブロックします。このメソッドでは、続行する前にすべてのタスクが確実に完了しますが、現在のスレッドが他の作業を実行できなくなります。
推奨メソッド: Task.WhenAll()
複数の非同期タスクを効率的に実行するには、Task.WhenAll()
を使用することをお勧めします。このメソッドは、スレッドをブロックせずにタスクを同時に開始します。タスクが完了すると、タスクは自動的に待機し、現在のスレッドが処理を続行できるようになります。
以下は Task.WhenAll()
の使用例です:
<code class="language-csharp">public async Task DoWork() { int[] ids = new[] { 1, 2, 3, 4, 5 }; await Task.WhenAll(ids.Select(i => DoSomething(1, i, blogClient))); }</code>
Task.WhenAll()
を使用すると、上記のメソッドは現在のスレッドをブロックすることなく、すべてのタスクを非同期的に実行します。パフォーマンスをさらに最適化するために、後続の操作がない場合は、await
の使用を避け、メソッドから直接戻ることができます。
その他のリソース
これらの代替手段の詳細については、次のブログ投稿を参照してください:
以上がC# で複数の非同期タスクを効率的に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。