Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menangkap Pengecualian daripada Kaedah Async Void dalam C#?

Bagaimanakah Saya Boleh Menangkap Pengecualian daripada Kaedah Async Void dalam C#?

DDD
Lepaskan: 2025-01-24 02:45:12
asal
947 orang telah melayarinya

How Can I Catch Exceptions from Async Void Methods in C#?

Mengendalikan pengecualian dalam kaedah lompang tak segerak

Dalam .NET Async CTP Microsoft, kaedah tak segerak berkelakuan berbeza apabila melontar pengecualian. Dalam kaedah Tugas asynchronous atau Task tak segerak, pengecualian ditangkap dan dilampirkan pada objek Task. Walau bagaimanapun, untuk kaedah kekosongan tak segerak, tiada objek Tugas untuk mengendalikan pengecualian.

Pengecualian tangkap

Untuk menangkap pengecualian yang dilemparkan oleh kaedah kekosongan tak segerak, anda mesti menunggu secara eksplisit panggilan kaedah atau menggunakan kaedah Tunggu():

  1. Menunggu panggilan kaedah:

    <code class="language-csharp"> public async Task Foo()
     {
         var x = await DoSomethingAsync();
     }
    
     public async void DoFoo()
     {
         try
         {
             await Foo();
         }
         catch (ProtocolException ex)
         {
             // 由于在异步方法中等待了调用,因此将捕获异常。
         }
     }</code>
    Salin selepas log masuk
  2. Gunakan kaedah Tunggu():

    <code class="language-csharp"> public void DoFoo()
     {
         try
         {
             Foo().Wait();
         }
         catch (ProtocolException ex)
         {
             // 由于等待了调用的完成,因此将捕获异常。
         }
     }</code>
    Salin selepas log masuk

Ralat mengendalikan semantik

Seperti yang Stephen Cleary nyatakan, kaedah kekosongan tak segerak mempunyai semantik pengendalian ralat yang berbeza:

"Apabila kaedah async void melontarkan pengecualian, pengecualian dibangkitkan terus pada SynchronizationContext yang aktif semasa kaedah asynchronous void dimulakan."

Arahan lain

    Jika .NET melaksanakan kaedah secara serentak, menggunakan Wait() boleh menyebabkan aplikasi disekat.
  • Lihat penjelasan di bawah untuk mendapatkan butiran tentang cara pengkompil mengendalikan tingkah laku ini:
  • https://www.php.cn/link/c4d856156b2c629314b9edd13523fe8e

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menangkap Pengecualian daripada 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan