Prosedur Pemprosesan Insiden Asynchronous: Mengendalikan Kaedah Ruang Asynchronous
Dalam bidang pengaturcaraan asynchronous, amalan menggunakan "terlupa untuk lupa" untuk memulakan tugas sering tidak digalakkan, kerana kaedah ini tidak mempunyai kebolehkerjaan tugas menggantung, dan sukar untuk menangani kaedah tersebut. Walau bagaimanapun, persoalan prosedur pemprosesan peristiwa tak segerak muncul: Sekiranya kita mengguna pakai prinsip -prinsip mengelakkan yang sama?
Sebab -sebab prosedur pemprosesan peristiwa tak segerak
Tidak ada keraguan bahawa kaedah yang disyorkan adalah untuk mengelakkan menggunakan ruang tak segerak. Walau bagaimanapun, prosedur pemprosesan ruang tak segerak adalah pengecualian. Ini kerana prosedur pemprosesan peristiwa mempunyai konteks asynchronous semulajadi, yang biasanya digunakan untuk pelaksanaan spesifik, pakai buang, jadi kekurangan nilai pulangan tidak menjadi masalah.
Contoh: Re -examine adegan pemuatan tetingkap
Memandangkan prosedur pemprosesan insiden ruang tak segerak berikut:
Untuk mengurangkan kecacatan yang berpotensi, kita boleh menjalankan pembinaan semula berikut:
<code>private async void Form_Load(object sender, System.EventArgs e) { await Task.Delay(2000); // 执行异步操作 // ... } </code>
Risiko tersembunyi yang memerlukan perhatian
<code>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>
Di samping masalah re -incoming yang berpotensi, masih terdapat beberapa risiko yang lebih halus dalam prosedur pemprosesan untuk peristiwa tak segerak:
Thread Security:
Prosedur pemprosesan peristiwa asynchronous pada dasarnya dipanggil pada benang UI. Sekiranya operasi asynchronous yang berkaitan memerlukan benang operasi panjang, ia boleh menyebabkan UI bertindak balas tanpa tindak balas.Odoma:
Atas ialah kandungan terperinci Perlukah Pengendali Acara Async Void Dielakkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!