Rumah > pembangunan bahagian belakang > C++ > Sekiranya anda mengelakkan pengendali acara async void?

Sekiranya anda mengelakkan pengendali acara async void?

Patricia Arquette
Lepaskan: 2025-01-26 02:46:09
asal
814 orang telah melayarinya

Should You Avoid Async Void Event Handlers?

Prosedur pemprosesan acara: Sekiranya ia dielakkan? async void Secara umum, cadangan amalan terbaik untuk mengelakkan menggunakan kaedah , terutamanya apabila memulakan tugas, kerana mereka tidak mempunyai mekanisme penjejakan dan tugas gantung, dan pemprosesan yang tidak normal lebih rumit. Tetapi adakah prinsip ini digunakan untuk program pemprosesan acara

?

async void mari kita lihat contoh: async void

Daripada menggunakan kaedah ini, lebih baik untuk mengubah reka bentuk kod untuk mencapai penjejakan tugas dan membatalkan fungsi:

<code class="language-csharp">private async void Form_Load(object sender, System.EventArgs e)
{
    await Task.Delay(2000); // 执行异步操作
    // ...
}</code>
Salin selepas log masuk

Di samping masalah re -incoming yang berpotensi, apakah perangkap tersembunyi dalam prosedur pemprosesan insiden

?
<code class="language-csharp">Task onFormLoadTask = null; // 跟踪任务,可以实现取消

private void Form_Load(object sender, System.EventArgs e)
{
    this.onFormLoadTask = OnFormLoadTaskAsync(sender, e);
}

private async Task OnFormLoadTaskAsync(object sender, System.EventArgs e)
{
    await Task.Delay(2000); // 执行异步操作
    // ...
}</code>
Salin selepas log masuk

Kuncinya ialah penggunaan async void dipujuk dalam konteks yang tidak boleh elegan untuk mengendalikan keabnormalan. Walau bagaimanapun, dalam prosedur pemprosesan peristiwa, keabnormalan akan diproses dengan mengarahkan ke pemprosesan abnormal global untuk memastikan bahawa mereka ditangkap dan diproses dengan sewajarnya tanpa rawatan ralat eksplisit dalam program pemprosesan acara itu sendiri. Ini adalah perbezaan utama antara dalam keadaan tertentu ini.

Untuk menguji unit, pendekatan biasa adalah untuk mengekstrak semua logik semua async void kaedah untuk pengasingan: async void

Singkatnya, walaupun kaedah

biasanya tidak disyorkan, mereka boleh diterima untuk menggunakannya dalam program pemprosesan acara async void, kerana rangka kerja program pemprosesan peristiwa mempunyai mekanisme pemprosesan yang tidak normal. Oleh itu, anda boleh menggunakan

dalam program pemprosesan acara tanpa melanggar amalan terbaik.
<code class="language-csharp">public async Task OnFormLoadAsync(object sender, EventArgs e)
{
  await Task.Delay(2000);
  ...
}

private async void Form_Load(object sender, EventArgs e)
{
  await OnFormLoadAsync(sender, e);
}</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Sekiranya anda mengelakkan pengendali acara async void?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan