處理非同步 void 方法中的異常
在 Microsoft 的 .NET 非同步 CTP 中,非同步方法在拋出異常時的行為有所不同。在非同步 Task 或非同步 Task
捕獲異常
要捕捉非同步 void 方法拋出的異常,必須明確等待方法呼叫或使用 Wait() 方法:
等待方法呼叫:
<code class="language-csharp"> public async Task Foo() { var x = await DoSomethingAsync(); } public async void DoFoo() { try { await Foo(); } catch (ProtocolException ex) { // 由于在异步方法中等待了调用,因此将捕获异常。 } }</code>
使用 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中文網其他相關文章!