Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Kaedah Tugas Async Void dan Async Berbeza dalam Mengendalikan Operasi Cemerlang dalam ASP.NET?

Bagaimanakah Kaedah Tugas Async Void dan Async Berbeza dalam Mengendalikan Operasi Cemerlang dalam ASP.NET?

Mary-Kate Olsen
Lepaskan: 2025-01-04 01:43:41
asal
843 orang telah melayarinya

How Do Async Void and Async Task Methods Differ in Handling Outstanding Operations in 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
Salin selepas log masuk

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;
    }
}
Salin selepas log masuk

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!

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