首頁 >後端開發 >C++ >如何捕捉 C# 中 Async Void 方法的異常?

如何捕捉 C# 中 Async Void 方法的異常?

DDD
DDD原創
2025-01-24 02:45:12906瀏覽

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

處理非同步 void 方法中的異常

在 Microsoft 的 .NET 非同步 CTP 中,非同步方法在拋出異常時的行為有所不同。在非同步 Task 或非同步 Task 方法中,異常會被捕獲並附加到 Task 物件。但是,對於非同步 void 方法,則沒有 Task 物件來處理異常。

捕獲異常

要捕捉非同步 void 方法拋出的異常,必須明確等待方法呼叫或使用 Wait() 方法:

  1. 等待方法呼叫:

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

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

錯誤處理語意

正如 Stephen Cleary 所指出的那樣,非同步 void 方法具有不同的錯誤處理語義:

「當非同步 void 方法拋出異常時,該異常將直接在非同步 void 方法啟動時處於活動狀態的 SynchronizationContext 上引發。」

其他說明

以上是如何捕捉 C# 中 Async Void 方法的異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn