Rumah >pembangunan bahagian belakang >C++ >Bilakah Saya Harus Menggunakan `await Task.WhenAll` Daripada Berbilang Penyata `menunggu`?

Bilakah Saya Harus Menggunakan `await Task.WhenAll` Daripada Berbilang Penyata `menunggu`?

Linda Hamilton
Linda Hamiltonasal
2025-01-20 07:37:08412semak imbas

When Should I Use `await Task.WhenAll` Instead of Multiple `await` Statements?

Mengapa memilih await Task.WhenAll dan bukannya berbilang await?

Apabila berurusan dengan tugas tak segerak, soalan biasa ialah sama ada anda perlu menggunakan await Task.WhenAll dan bukannya berbilang await pernyataan. Artikel ini meneroka kelebihan menggunakan Task.WhenAll dalam senario tertentu.

Pertimbangkan kaedah berikut (DoWork1 dan DoWork2) yang melaksanakan satu siri tugas tak segerak:

<code class="language-csharp">static async Task DoWork1()
{
    await DoTaskAsync("t1.1", 3000);
    await DoTaskAsync("t1.2", 2000);
    await DoTaskAsync("t1.3", 1000);
}

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);
}</code>

Dalam kedua-dua kes, matlamatnya adalah untuk melaksanakan tugasan secara tidak segerak dan meneruskan pelaksanaan selepas semua tugasan selesai. Walau bagaimanapun, terdapat perbezaan utama antara kedua-dua pendekatan.

1. Ralat pengendalian:

Task.WhenAll mempunyai kelebihan menyebarkan ralat untuk semua tugasan sekaligus. Dalam DoWork1, jika mana-mana tugasan gagal, ralat ini akan hilang kerana ia akan ditimpa oleh kenyataan await berikutnya. DoWork2 sebaliknya akan mengumpul dan memaparkan semua ralat yang berlaku semasa pelaksanaan tugas.

2. Semantik penyelesaian tugasan:

Task.WhenAll Tunggu semua tugasan selesai, walaupun beberapa tugasan gagal atau dibatalkan. Ini jelas dalam situasi di mana tugas mungkin membuang pengecualian atau tamat masa. Dalam DoWork1, jika satu tugasan gagal atau tamat tempoh, program meneruskan pelaksanaan tanpa menunggu tugasan lain. Ini boleh membawa kepada tingkah laku yang tidak dijangka dan keadaan bangsa.

3. Kebolehbacaan kod:

Menggunakan Task.WhenAll meningkatkan kebolehbacaan kod anda kerana ia jelas menunjukkan niat untuk menunggu semua tugasan selesai. Ia merangkum aspek async menunggu kod, menjadikannya lebih mudah untuk memahami keseluruhan aliran pelaksanaan.

Atas ialah kandungan terperinci Bilakah Saya Harus Menggunakan `await Task.WhenAll` Daripada Berbilang Penyata `menunggu`?. 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