首页 > 解决方案 > C# AggregateException,在什么情况下我会聚合异常?

问题描述

我可能错过了一个非常明显的事实,但我很难理解对 AggregatedExceptions 的需求。

我知道自从 async/await 之后,我们就不必再为 AggregatedExceptions 烦恼了(或者至少不那么频繁地遇到它们了)。我可以与之相关,因为我只是启动一个任务,有时我选择将“调用线程”与“并行运行的任务”同步

var sometTask = DoSomethingInParallelAsync().ConfigureAwait(false);
...
...
await someTask;

DoSomethingInParallelAsync()在这种情况下,当我等待该调用时,将向我显示发生的异常。

为什么不使用await,但WaitTask明确的情况下如此不同?

var someTask = DoSomethingInParallelAsync();
...
...
someTask.Wait();

此示例中抛出的异常将始终将抛出的异常包装ExceptionAggregateException. 我还是不明白为什么。

当使用 async/await 消除对AggregateExceptions 的需求时,我不能做什么?

标签: c#aggregateexception

解决方案


错误的产生和处理

Task task1 = Task.Factory.StartNew(() => { throw new ArgumentException(); } );
Task task2 = Task.Factory.StartNew(() => { throw new UnauthorizedAccessException(); } );

try
{
    Task.WaitAll(task1, task2);
}
catch (AggregateException ae)
{
}

并且还看到 链接

这是一个例子:link2


推荐阅读