ホームページ > バックエンド開発 > C++ > .NET 4.5 で並列非同期タスクを効率的に実行して結果を収集するにはどうすればよいですか?

.NET 4.5 で並列非同期タスクを効率的に実行して結果を収集するにはどうすればよいですか?

DDD
リリース: 2025-01-13 07:16:42
オリジナル
337 人が閲覧しました

How Can I Efficiently Run and Collect Results from Parallel Async Tasks in .NET 4.5?

.NET 4.5 で非同期タスクを並列実行し、結果を収集します

紹介:

長時間実行タスクの実行とその結果の収集を同時に行うことは、.NET アプリケーションの一般的な要件です。 .NET 4.5 では、非同期プログラミングの導入により、従来のスレッドベースのアプローチが進化しました。この記事では、.NET 4.5 で非同期タスクの並列実行を実装するための最良の方法を検討します。

元のコード:

提供されたコードは、Task.Run() を使用して 2 つの長時間実行タスクを起動し、次に Result を使用してそれらの結果を取得するという基本的なアプローチを示しています。ただし、この方法にはいくつかの制限があります:

  • スリープは、他のメソッドを待機できる非同期メソッドにすることはできません。
  • コードは不格好で、新しい言語機能を活用していません。
  • Result の使用時に結果のブロックが発生する可能性があり、パフォーマンスに影響します。

無効なコード:

非同期メソッドを呼び出して非実行タスクを作成しようとすると、非同期メソッドはすぐに実行を開始するため失敗します。

最良の解決策:

最良の解決策には、長時間実行タスクの非同期バージョンを使用し、Task.WhenAll() メソッドを活用することが含まれます。例は次のとおりです:

<code class="language-csharp">async Task<int> LongTask1() { 
  // ...长时间运行的任务1...
  return 0; 
}

async Task<int> LongTask2() { 
  // ...长时间运行的任务2...
  return 1; 
}

// ...
{
   Task<int> t1 = LongTask1();
   Task<int> t2 = LongTask2();
   await Task.WhenAll(t1,t2);
   //现在我们可以访问t1.Result和t2.Result
}</code>
ログイン後にコピー

このコードは、LongTask1 と LongTask2 の非同期タスクを作成し、Task.WhenAll() を使用してそれらが完了するのを待ちます。これにより、タスクをブロックせずに同時に実行できます。最後に、t1.Result と t2.Result を使用して結果にアクセスできます。

以上が.NET 4.5 で並列非同期タスクを効率的に実行して結果を収集するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート