Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Mengendalikan Pengecualian yang Dilemparkan oleh Kaedah Async Void dalam C#?

Bagaimanakah Saya Mengendalikan Pengecualian yang Dilemparkan oleh Kaedah Async Void dalam C#?

Patricia Arquette
Lepaskan: 2025-01-24 02:27:09
asal
693 orang telah melayarinya

How Do I Handle Exceptions Thrown by Async Void Methods in C#?

Pengendalian pengecualian kaedah kekosongan tak segerak dalam C#

Apabila menggunakan CTP tak segerak .NET, adalah penting untuk memahami cara pengecualian dikendalikan di dalam dan di luar kaedah tak segerak, terutamanya apabila berurusan dengan kaedah lompang tak segerak.

Penyebaran pengecualian dalam kaedah tak segerak

Dalam kod C# yang disediakan, kaedah kekosongan tak segerak bernama Foo() dilaksanakan secara tak segerak, dan ia dipanggil oleh kaedah bukan tak segerak DoFoo(). Dalam Foo(), jika pengecualian (seperti ProtocolException) dilemparkan, ia tidak disebarkan secara automatik ke DoFoo(). Ini kerana kaedah kekosongan asynchronous tidak mengembalikan objek Tugas yang boleh ditunggu.

Kendalikan pengecualian dalam kaedah panggilan

Untuk menangkap pengecualian yang dilemparkan daripada kaedah kekosongan tak segerak dalam kaedah panggilan, anda mesti:

  1. Tunggu panggilan dalam kaedah tak segerak:

    Ubah suai kaedah DoFoo() untuk menjadikannya tak segerak dan gunakan await Foo(). Ini akan menunggu untuk Foo() menyelesaikan dan menangkap sebarang pengecualian yang mungkin dilemparkan.

  2. Penyegerakan menunggu untuk selesai:

    Gunakan kaedah Tunggu() hasil Foo() dalam DoFoo(). Ini akan menyekat benang sehingga operasi tak segerak selesai dan membuang sebarang pengecualian yang berlaku.

Contoh penggunaan menunggu:

<code class="language-csharp">public async void DoFoo()
{
    try
    {
        await Foo(); // 因为您已 await,所以会捕获异常
    }
    catch (ProtocolException ex)
    {
        // 处理异常
    }
}</code>
Salin selepas log masuk

Contoh menggunakan Tunggu:

<code class="language-csharp">public void DoFoo()
{
    try
    {
        Foo().Wait(); // 因为您已等待,所以会捕获异常
    }
    catch (ProtocolException ex)
    {
        // 处理异常
    }
}</code>
Salin selepas log masuk

Perlu diingat bahawa menggunakan Tunggu boleh menyebabkan masalah penyegerakan yang berpotensi kerana ia menyekat urutan sehingga operasi selesai. Adalah disyorkan untuk menggunakan kaedah await terlebih dahulu untuk mengelak daripada menyekat urutan dan meningkatkan responsif program.

Atas ialah kandungan terperinci Bagaimanakah Saya Mengendalikan Pengecualian yang Dilemparkan oleh Kaedah Async Void dalam C#?. 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