Mengapa Async Void Bukan Idea Hebat: Memecahkan Sebab
Sementara mengembalikan kekosongan daripada kaedah async mungkin kelihatan tidak berbahaya dalam sesetengah keadaan situasi, amalan terbaik industri sangat tidak menggalakkannya. Inilah sebabnya:
1. Keanehan Pengendalian Pengecualian
Kaedah async void mempunyai semantik pengendalian ralat yang unik. Pengecualian yang terlepas daripada kaedah async void, seperti "PrimeCustomTask" dalam contoh yang disediakan, menjadi janggal untuk ditangkap dan dikendalikan. Ini merumitkan pengendalian ralat dan menjadikan penyahpepijatan lebih mencabar.
2. Cabaran Komposisi
Kaedah async void tidak mempunyai keupayaan untuk mengarang dengan baik dengan operasi async yang lain. Kod dalam "PrimeCustomTask" wujud secara berasingan dan tidak boleh disepadukan dengan mudah ke dalam binaan async peringkat lebih tinggi. Ini mengehadkan kebolehselenggaraan kod dan penggunaan semula kod.
3. Menguji Kesukaran
Kaedah async void ujian unit adalah amat sukar. Memandangkan kaedah mengembalikan batal, adalah mencabar untuk mencipta pernyataan yang boleh dipercayai dan menguji semua laluan pelaksanaan yang mungkin. Ini menyukarkan untuk memastikan ketepatan kod.
4. Penyebaran Pengecualian
Seperti yang dinyatakan dalam jawapan, pengecualian yang terlepas daripada "PrimeCustomTask" tidak disebarkan secara semula jadi kepada pemanggilnya. Ini boleh membawa kepada tingkah laku yang tidak dijangka dan menyukarkan untuk mengendalikan ralat dengan berkesan.
Mengubah suai untuk Mengikuti Konvensyen
Untuk menyelaraskan dengan konvensyen yang ditetapkan, anda boleh mengubah suai kod dalam contoh untuk menggunakan kaedah Tugas async:
protected override async Task OnLoad(EventArgs e) { if (CustomTask == null) await PrimeCustomTask(); } private async Task PrimeCustomTask() ...
Dengan mengembalikan Tugas async, anda mendapat manfaat daripada:
Dengan menerima amalan terbaik ini, anda akan menulis lebih boleh diselenggara, boleh diuji dan kod yang boleh dipercayai apabila menggunakan kaedah async.
Atas ialah kandungan terperinci Mengapa Anda Harus Mengelakkan Kaedah Async Void dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!