ホームページ >バックエンド開発 >C++ >C# で複数の非同期タスクを処理する最も効率的な方法は何ですか?

C# で複数の非同期タスクを処理する最も効率的な方法は何ですか?

DDD
DDDオリジナル
2025-01-22 03:31:15283ブラウズ

What's the Most Efficient Way to Handle Multiple Async Tasks in C#?

C# で複数の非同期タスクを効率的に処理する

非同期 API クライアントを扱う場合、複数のタスクを起動し、それらの完了を同期する最も効率的な方法を決定することが重要です。この記事では、2 つの一般的な手法を検討し、パフォーマンスを最大化するために推奨される代替手法を紹介します。

一般的な方法

  1. Parallel.ForEach.Wait() を使用します:

    <code class="language-csharp"> Parallel.ForEach(ids, i => DoSomething(1, i, blogClient).Wait());</code>

    このアプローチは操作を並行して実行しますが、完了するまで各タスクのスレッドをブロックします。したがって、ネットワーク呼び出しに時間がかかると、スレッドはアイドル状態のままになります。

  2. Task.WaitAll を使用します:

    <code class="language-csharp"> Task.WaitAll(ids.Select(i => DoSomething(1, i, blogClient)).ToArray());</code>

    このコードは、すべてのタスクが完了するまで待機し、すべての操作が完了するまで現在のスレッドをブロックします。

おすすめの方法

最適な非同期実行のために、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>

このメソッドはタスクを並行して開始し、現在のスレッドが完了するまで他のタスクの実行を継続できるようにします。これにより、CPU 使用率が最適化され、応答性が維持されます。

コードを最大限に単純化するには、待たずに次のコードで十分です:

<code class="language-csharp">public Task DoWork() {
    int[] ids = new[] { 1, 2, 3, 4, 5 };
    return Task.WhenAll(ids.Select(i => DoSomething(1, i, blogClient)));
}</code>

Task.WhenAll を使用すると、スレッド効率やシステムの応答性を犠牲にすることなく、複数の非同期操作を効率的に並行して実行できます。

以上がC# で複数の非同期タスクを処理する最も効率的な方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。