首頁 > 後端開發 > C++ > 如何在 .NET 4.5 中高效運行並行非同步任務並收集結果?

如何在 .NET 4.5 中高效運行並行非同步任務並收集結果?

DDD
發布: 2025-01-13 07:16:42
原創
338 人瀏覽過

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()啟動兩個長時間運行的任務,然後使用Result檢索其結果的基本方法。但是,此方法有一些限制:

  • Sleep無法成為可以等待其他方法的非同步方法。
  • 程式碼笨拙,沒有利用新的語言特性。
  • 使用Result時可能會發生Result阻塞,這會影響效能。

無效碼:

透過呼叫非同步方法來建立非運行Task的嘗試失敗了,因為非同步方法會立即開始執行。

最佳解:

最佳解決方案包括使用長時間運行任務的非同步版本並利用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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板