首页 >后端开发 >C++ >如何捕获 C# 中 Async Void 方法的异常?

如何捕获 C# 中 Async Void 方法的异常?

DDD
DDD原创
2025-01-24 02:45:12949浏览

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