Rumah > pembangunan bahagian belakang > C++ > Perlukah Saya Menunggu atau Mengembalikan Tugasan dalam Kaedah Async C#?

Perlukah Saya Menunggu atau Mengembalikan Tugasan dalam Kaedah Async C#?

DDD
Lepaskan: 2025-01-04 04:12:39
asal
689 orang telah melayarinya

Should I Await or Return Tasks in Async C# Methods?

Menunggu vs Kembali dalam Kaedah Async: Akibat Diteroka

Apabila bekerja dengan pengaturcaraan tak segerak dalam C#, pembangun sering menghadapi persoalan sama ada untuk menunggu panggilan kaedah async dalam yang lain kaedah async atau hanya kembalikan tugas. Walaupun kedua-dua pendekatan mungkin kelihatan sah, setiap pilihan mempunyai akibat berbeza yang memerlukan pertimbangan.

Pilihan A: Mengembalikan Tugas Secara Terus

Dalam pendekatan ini, kaedah async kembali secara langsung tugas yang diperoleh daripada panggilan async bersarang. Ini sama seperti menulis:

Task FooAsync()
{
    return BazAsync();  // Option A
}
Salin selepas log masuk

Akibat:

  • Pemanggil bertanggungjawab untuk menunggu tugasan yang dikembalikan.
  • Kaedahnya boleh dipanggil daripada konteks segerak dan tak segerak.
  • Pengecualian yang dilemparkan dalam kod segerak dalam kaedah akan dihantar secara serentak.
  • Pengesahan hujah boleh dilakukan secara serentak.

Pilihan B: Menunggu Tugas

Semasa menunggu tugasan, kaedah async dengan jelas menunggu panggilan async bersarang selesai. Ini ditulis sebagai:

async Task BarAsync()
{
    await BazAsync(); // Option B
}
Salin selepas log masuk

Akibat:

  • Kaedah mesti diisytiharkan sebagai tak segerak kerana ia menjalankan operasi menunggu.
  • Pemanggil tidak perlu menunggu kaedah itu sendiri.
  • Pengecualian yang dilemparkan dalam asynchronous kod akan dihantar secara tidak segerak.
  • Pengesahan hujah tidak boleh dilakukan secara serentak.

Memilih Pilihan yang Tepat

Pilihan antara kembali atau menunggu bergantung pada senario dan keperluan tertentu.

Jika kaedah melaksanakan sejumlah kecil kerja segerak dan memanggil hanya satu kaedah async, mengembalikan tugas (Pilihan A) boleh menjadi pendekatan yang lebih cekap. Walau bagaimanapun, jika kaedah perlu melakukan kerja tak segerak tambahan atau mengendalikan pengecualian secara tak segerak, maka menunggu tugasan (Pilihan B) ialah pilihan yang sesuai.

Perlu ambil perhatian bahawa kaedah yang diisytiharkan sebagai tak segerak tidak boleh mengembalikan tugasan secara langsung. Jika kaedah mesti mengembalikan tugasan, ia sendiri mesti diisytiharkan sebagai tak segerak.

Contoh Praktikal

Pertimbangkan coretan kod berikut:

// Version 1:
Task BarAsync()
{
    // No need to gronkle yet...
    return BazAsync();
}

// Oops, for version 2 I need to do some more work...
async Task BarAsync()
{
    int gronkle = await GronkleAsync();
    // Do something with gronkle

    // Now we have to await BazAsync as we're now in an async method
    await BazAsync();
}
Salin selepas log masuk

Pada mulanya, kaedah BarAsync tidak perlu menunggu BazAsync, jadi ia mengembalikan tugas secara langsung. Walau bagaimanapun, apabila kerja tak segerak tambahan diperkenalkan, BarAsync terpaksa ditukar kepada kaedah tak segerak dan menunggu BazAsync.

Dengan memahami akibat pemulangan atau menunggu dalam kaedah tak segerak, pembangun boleh melaksanakan kod tak segerak dengan berkesan dan mengelakkan kemungkinan perangkap .

Atas ialah kandungan terperinci Perlukah Saya Menunggu atau Mengembalikan Tugasan dalam Kaedah Async C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan