Rumah >pembangunan bahagian belakang >C++ >Mengapa Saya Harus Mengelakkan Kaedah Async Void dalam C#?

Mengapa Saya Harus Mengelakkan Kaedah Async Void dalam C#?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-31 06:07:08642semak imbas

Why Should I Avoid Async Void Methods in C#?

Kesalahan Async Void: Penjelasan Terperinci

Kaedah Async void telah membuktikan diri mereka sebagai amalan yang lemah dalam pengekodan. Artikel ini menyelidiki dengan lebih mendalam mengapa sebenarnya ini berlaku, merujuk artikel terkenal "Mengelakkan Kekosongan Async."

Sebab Mengelakkan Kekosongan Async

  • Ralat Mengendalikan Percanggahan:
    Tidak seperti kaedah penyegerakan, async kaedah void mengendalikan pengecualian secara berbeza. Pengecualian yang berlaku dalam kaedah async void mungkin tidak merambat ke atas dan boleh mencabar untuk ditangkap.
  • Cabaran Komposisi:
    Kaedah async void menghalang organisasi kod dan penggunaan semula. Memandangkan kaedah ini tidak mengembalikan tugasan, ia menjadi sukar untuk menyusunnya menjadi aliran kerja tak segerak yang lebih besar.
  • Perjuangan Kebolehujian:
    Menguji kaedah async void adalah tugas untuk dirinya sendiri. Ia memerlukan perancangan yang teliti untuk memastikan liputan kod yang sesuai dan kemungkinan pengecualiannya.

Pertimbangan Tambahan

Kekosongan async dianggap sebagai anomali dalam alam async /menunggu bahasa. Kebanyakan bahasa, termasuk F#, Python, JavaScript dan TypeScript, tidak menyokongnya. Kemasukannya dalam C#/VB adalah terutamanya untuk menampung pengendali acara tak segerak.

Pendekatan Pilihan

Dalam contoh anda, jika anda melaraskan kod anda untuk menggunakan pengendali acara void async :

protected override async void OnLoad(EventArgs e)
{
    if (CustomTask == null)
        await PrimeCustomTask();
}

private async Task PrimeCustomTask()
{...}

Kemudian kelemahan async tidak sah akan terhad kepada pengendali acara, menjadikan pengendalian pengecualian, gubahan dan ujian lebih terurus.

Atas ialah kandungan terperinci Mengapa Saya Harus Mengelakkan Kaedah Async Void dalam C#?. 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