У меня есть метод Async, возвращающий задачу.
Я также хотел бы предложить синхронный эквивалент, но я не хочу, чтобы его потребителям приходилось распаковывать AggregateException
с.
Теперь я понимаю, что вся идея в том, что вы не можете произвольно выбрать один общий способ, и я знаю, что мог бы пойти и прочитать множество других статей Стивена Тауба (я буду, но не сейчас), и я пойму это все и сам могу решить.
Тем временем я хочу использовать тот факт, что мои задачи на самом деле просто связаны между собой «рабочими процессами» без параллелизма, а просто с промежуточными ожиданиями (нет, не TPL DataFlow), которые не должны приводить к более чем одному исключению. В этом случае было бы целесообразно обрабатывать следующим образом:
CallAsync().Wait();
}
catch( AggregateException ae)
{
throw ae.Flatten().First()
или я гарантирую, что AggregateException
всегда имеет InnerException
, даже если их больше одного. Или есть случай, когда я должен вернуться к .Flatten().First()
?
В некоторых документах TPL я вижу ссылку на метод Unwrap()
в AggregateException
(не уверен, было ли это расширением или что-то в бета-версии).
Как заполнитель я делаю:
void Call( )
{
try
{
CallAsync().Wait();
}
catch ( AggregateException ex )
{
var translated = ex.InnerException ?? ex.Flatten().InnerExceptions.First();
if ( translated == null )
throw;
throw translated; }
}
Task CallAsync(){ ...