Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Kaedah Tugas Async Void dan Async Berbeza dalam Mengendalikan Operasi Cemerlang dalam ASP.NET?
Kiraan Operasi Cemerlang dalam Async Void dan Async Task dalam ASP.Net
Dalam aplikasi ASP.Net, kaedah async void berbeza daripada kaedah Tugas async dalam pengendalian operasi tertunggak. Perbezaan ini boleh membawa kepada pengecualian berikut dengan async void tetapi tidak dengan async Task:
System.InvalidOperationException: An asynchronous module or handler completed while an asynchronous operation was still pending
Memahami Async Void
Async void menambah kiraan operasi tertunggak apabila dipanggil dan mengurangkannya apabila selesai. Ini menunjukkan bahawa ia tidak benar-benar mengakibatkan gelagat "api dan lupa", kerana ASP.Net menjejaki penyiapannya.
Mengapa Tugas Async berfungsi?
Bila mengembalikan Tugas, kiraan operasi tertunggak tidak meningkat. Sebaliknya, rangka kerja mengendalikan menunggu secara tidak segerak untuk Tugasan yang dikembalikan selesai. Pendekatan ini menghapuskan potensi pengecualian yang disebutkan di atas.
Contoh
public class HomeController : AsyncController { // Will work fine (no exception) public async Task<ActionResult> ThisPageWillLoad() { // Fire and forget task this.FireAndForgetTask(); return await Task.FromResult(this.View("Index")); } private async Task FireAndForgetTask() { var task = Task.Delay(TimeSpan.FromSeconds(3)); await task; } // Will result in an exception due to async void public async Task<ActionResult> ThisPageWillNotLoad() { this.FireAndForgetVoid(); return await Task.FromResult(this.View("Index")); } private async void FireAndForgetVoid() { var task = Task.Delay(TimeSpan.FromSeconds(3)); await task; } }
Konteks Sejarah
Microsoft diutamakan ke belakang keserasian dan "satu ASP.NET" apabila memperkenalkan async kepada ASP.Net. Mereka mengekalkan sokongan untuk komponen EAP tetapi mempertingkatkan teras ASP.Net SynchronizationContext untuk mengesan dan mengecualikan sebarang penggunaan tidak wajar async void dalam senario tertentu. Dalam dunia MVC/WebAPI/SignalR, rangka kerja menggunakan Tugas async secara semula jadi, menghapuskan keperluan untuk kekosongan async.
Kesimpulan
Dalam aplikasi ASP.Net moden, ia biasanya disyorkan untuk mengelakkan async void dan sebaliknya mengembalikan Tugas. Pendekatan ini memastikan penjejakan yang betul bagi operasi tertunggak dan menghapuskan potensi pengecualian yang disebutkan di atas.
Atas ialah kandungan terperinci Bagaimanakah Kaedah Tugas Async Void dan Async Berbeza dalam Mengendalikan Operasi Cemerlang dalam ASP.NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!