处理异步 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中文网其他相关文章!