首頁 > 後端開發 > C++ > `await Task.WhenAll` 與多個等待:處理多個非同步任務的首選方法是什麼?

`await Task.WhenAll` 與多個等待:處理多個非同步任務的首選方法是什麼?

Linda Hamilton
發布: 2025-01-20 07:26:09
原創
494 人瀏覽過

`await Task.WhenAll` vs. Multiple Awaits: Which is the Preferred Method for Handling Multiple Asynchronous Tasks?

非同步任務完成的優選方法:單一 await Task.WhenAll 與多個 await 的比較

在非同步程式設計中,處理多個任務時,開發者常常需要在使用單一的 await Task.WhenAll 語句和依序執行多個 await 語句之間做出選擇。本文探討了使用 await Task.WhenAll 相比多個 await 的優勢,尤其是在任務完成順序不重要的場景下。

以下程式碼片段展示了兩種方法:

<code class="language-csharp">// 使用多个 await
static async Task DoWork1()
{
    var t1 = DoTaskAsync("t1.1", 3000);
    var t2 = DoTaskAsync("t1.2", 2000);
    var t3 = DoTaskAsync("t1.3", 1000);

    await t1; await t2; await t3;

    Console.WriteLine("DoWork1 results: {0}", String.Join(", ", t1.Result, t2.Result, t3.Result));
}

// 使用 await Task.WhenAll
static async Task DoWork2()
{
    var t1 = DoTaskAsync("t2.1", 3000);
    var t2 = DoTaskAsync("t2.2", 2000);
    var t3 = DoTaskAsync("t2.3", 1000);

    await Task.WhenAll(t1, t2, t3);

    Console.WriteLine("DoWork2 results: {0}", String.Join(", ", t1.Result, t2.Result, t3.Result));
}</code>
登入後複製

為什麼 await Task.WhenAll 比多 await 更優?

  1. 錯誤傳播: await Task.WhenAll 收集來自各個任務的所有錯誤,並將它們作為 AggregateException 傳播。這確保瞭如果一個或多個任務失敗,不會遺失任何錯誤。而多個 await 則會在先前的 await 拋出異常時隱藏錯誤。

  2. 保證完成: await Task.WhenAll 確保所有任務都將在其返回之前完成,即使某些任務已出錯或被取消。當你的程式碼依賴所有任務的結果都可用時,這一點尤其有用。

  3. 簡化程式碼: 使用 await Task.WhenAll 使等待多個任務的語義在程式碼中明確,提高了可讀性並降低了並發相關錯誤的風險。

以上是`await Task.WhenAll` 與多個等待:處理多個非同步任務的首選方法是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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