Это может произойти, если у вас есть «родительская» задача и одна или несколько «дочерних» задач, которые прикреплены к родительской. Это означает, что родительская задача будет завершена только после завершения всех ее дочерних задач, а исключения из дочерних задач также распространятся на родительскую задачу.
Взять, к примеру, следующий код:
var task = Task.Factory.StartNew(
() =>
{
Task.Factory.StartNew(
() => { throw new Exception("inner"); },
TaskCreationOptions.AttachedToParent);
throw new Exception("outer");
});
Если вы Wait()
выполняете это задание, это означает AggregateException
, который выглядит следующим образом:
AggregateException
Exception
: внешний
AggregateException
Если вам не нравится, что он может содержать AggregateException
s внутри AggregateException
s, вы можете использовать Flatten()
метод . Есть также еще один метод, который можно использовать для обработки AggregateException
с: Handle()
.