C# 使用AggregateException 信息

本文介绍了如何使用Task.WhenAll收集并处理并发任务中抛出的异常,通过AggregateException和InnerExceptions属性,展示了如何遍历并显示所有异常信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

81088a8ff17a357a2df20e3b307b0c32.png

为了得到所有失败任务的异常信息,可以将 Task.WhenAll 返回的结果写到一个Task 变量中。这个任务会一直等到所有任务都结束。否则,仍然可能错过抛出的异常。上一小节中,catch 语句只检索到第一个任务的异常。不过,现在可以访问外部任务的Exception 属性了。Exception 属性是AggregateException类型的。这个是常类型定义了InnerExceptions 属性(不只是InnerException),它包含了等待中的所有异常的列表。现在,可以轻松遍历所有异常了。

f8e5e59880975d298a2e366003001292.png

代码如下

private static async void ShowAggregatedException() 
{
  Task taskResult = null;
  try
  {
    Task tl = ThrowAfter(2000, "first"); 
    Task t2 = ThrowAfter(1000, "second");
    await (taskResult = Task.WhenAll(t1, t2));
  }
  catch (Exception ex)
  {
    Console.WriteLine($"handled {ex.Message}");
    foreach (var ex1 in taskResult.Exception.InnerExceptions)
    {
      Console.WriteLine($"inner exception {ex1.Message}");
    }
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值