Rumah >pembangunan bahagian belakang >C++ >`await Task.WhenAll` vs. Multiple Awaits: Manakah Kaedah Pilihan untuk Mengendalikan Berbilang Tugas Asynchronous?

`await Task.WhenAll` vs. Multiple Awaits: Manakah Kaedah Pilihan untuk Mengendalikan Berbilang Tugas Asynchronous?

Linda Hamilton
Linda Hamiltonasal
2025-01-20 07:26:09495semak imbas

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

Kaedah pilihan untuk penyiapan tugas tak segerak: Perbandingan await Task.WhenAll tunggal dan berbilang await

Dalam pengaturcaraan tak segerak, apabila mengendalikan berbilang tugas, pembangun selalunya perlu memilih antara menggunakan satu pernyataan await Task.WhenAll atau melaksanakan berbilang await pernyataan dalam urutan. Artikel ini meneroka kelebihan menggunakan await Task.WhenAll berbanding berbilang awaits, terutamanya dalam senario di mana susunan tugasan diselesaikan tidak penting.

Coretan kod berikut menunjukkan kedua-dua kaedah:

<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>

Mengapa await Task.WhenAll lebih baik daripada berbilang await?

  1. Penyebaran ralat: await Task.WhenAll mengumpul semua ralat daripada pelbagai tugas dan menyebarkannya sebagai AggregateException. Ini memastikan bahawa jika satu atau lebih tugas gagal, tiada ralat hilang. Berbilang await akan menyembunyikan ralat apabila await sebelumnya melemparkan pengecualian.

  2. Dijamin Selesai: await Task.WhenAll Menjamin bahawa semua tugasan akan diselesaikan sebelum pemulangannya, walaupun beberapa tugasan mempunyai ralat atau dibatalkan. Ini amat berguna apabila kod anda bergantung pada hasil semua tugas yang tersedia.

  3. Ringkaskan kod anda: Gunakan await Task.WhenAll untuk menjadikan semantik menunggu berbilang tugasan jelas dalam kod anda, meningkatkan kebolehbacaan dan mengurangkan risiko pepijat berkaitan serentak.

Atas ialah kandungan terperinci `await Task.WhenAll` vs. Multiple Awaits: Manakah Kaedah Pilihan untuk Mengendalikan Berbilang Tugas Asynchronous?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn