C # AggregateException, в каком сценарии у меня будут агрегированные исключения? - PullRequest
4 голосов
/ 30 октября 2019

Я, вероятно, упускаю очень очевидный факт, но мне трудно понять необходимость AggregatedExceptions.

Я знаю, что с async / await нам больше не нужно беспокоиться об AggregatedExceptions (или, по крайней мере, сталкиваются с ними реже). Я могу относиться к этому, потому что я просто запускаю задачу и иногда решаю синхронизировать «вызывающий поток» с «задачей, которая выполняется параллельно»

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

В этом сценарии исключение, котороеПроизошедшее в DoSomethingInParallelAsync() будет представлено мне, когда я буду ждать этого звонка.

Почему это так отличается без с использованием await, но Wait в Task явно?

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

Исключение, выброшенное в этом примере, всегда будет переносить брошенный Exception в AggregateException. Я до сих пор не понимаю, почему.

Что я не могу сделать при использовании async / await, который устраняет необходимость в AggregateException s?

1 Ответ

0 голосов
/ 30 октября 2019

Вызывает и обрабатывает ошибку

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

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

, а также видит, что links

, вот пример: link2

...