Rumah >pembangunan bahagian belakang >C++ >Mengapa Async Void Menyebabkan `System.InvalidOperationException` dalam ASP.NET?

Mengapa Async Void Menyebabkan `System.InvalidOperationException` dalam ASP.NET?

Susan Sarandon
Susan Sarandonasal
2025-01-04 16:25:39672semak imbas

Why Does Async Void Cause `System.InvalidOperationException` in ASP.NET?

Memahami Async Void dalam ASP.Net: Kiraan Operasi Cemerlang

Isu: Kaedah void Async dalam ASP.Net permohonan menimbulkan perkara berikut pengecualian:

System.InvalidOperationException: An asynchronous module or handler 
completed while an asynchronous operation was still pending

Penjelasan:

Kaedah tak segerak dalam ASP.Net menambah kiraan operasi tertunggak apabila diseru dan mengurangkannya apabila selesai. Kaedah async void secara langsung memberitahu ASP.Net SynchronizationContext, memintas rangka kerja MVC.

Task Return vs. Async Void:

Tidak seperti kaedah async void, mengembalikan Tugas daripada kaedah tak segerak:

  • Membenarkan rangka kerja mengurus mengembalikan tugasan dan menunggu penyelesaiannya
  • Memastikan penyegerakan yang betul dengan kitaran hayat permintaan
  • Mengelakkan pengecualian yang disebabkan oleh kembali awal daripada permintaan (amalan biasa dengan async void)

Dalam contoh yang disediakan:

  • ThisPageWillLoad() menggunakan async Tugasan, yang berfungsi seperti yang dijangkakan kerana rangka kerja MVC menunggu tugasan yang dikembalikan.
  • ThisPageWillNotLoad() menggunakan async void, menyebabkan pengecualian kerana ASP.Net menjangkakan kaedah akan lengkap sebelum halaman selesai dimuatkan, manakala async kaedah batal belum selesai.

"Api dan Lupakan" Salah tanggapan:

Kaedah async void tidak boleh dianggap "fire and forget" dalam ASP.Net. Walaupun mereka mungkin kelihatan seperti kebakaran-dan-lupa dalam beberapa senario, ralat pengendalian semantik menunjukkan bahawa mereka tidak benar-benar lupa.

Pertimbangan Tambahan:

  • Memulangkan Tugasan dan menggunakan async void secara serentak tidak disokong.
  • Sesetengah pihak ketiga perpustakaan mungkin menggunakan async void, tetapi adalah penting untuk mengelak daripada menggunakan perpustakaan tersebut kerana ia boleh membawa kepada komplikasi.
  • Jika anda perlu menggunakan TAP over EAP, pertimbangkan TAP-over-APM atau balut komponen EAP dengan Task. Lari.

Atas ialah kandungan terperinci Mengapa Async Void Menyebabkan `System.InvalidOperationException` dalam ASP.NET?. 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