Я хочу дождаться, чтобы сгенерировать AggregateException, а не только первое исключение

При ожидании сбойной задачи (для которой установлено исключение),await сбросит сохраненное исключение. Если сохраненное исключение являетсяAggregateException оно отбросит первое и отбросит все остальное.

Как мы можем использоватьawait и заодно киньте оригиналAggregateException чтобы мы случайно не потеряли информацию об ошибках?

Обратите внимание, что, конечно, можно подумать о хакерских решениях для этого (например,awaitзатем позвонитеTask.Wait). Я действительно хочу найти чистое решение.Какова лучшая практика здесь?

Я думал об использовании пользовательского ожидающего, но встроенныйTaskAwaiter содержит много магии, которую я не знаю, как полностью воспроизвести. Он вызывает внутренние API для типов TPL. Я тоже нетхотеть воспроизвести все это.

Вот короткое повторение, если вы хотите поиграть с ним:

static void Main()
{
    Run().Wait();
}

static async Task Run()
{
    Task[] tasks = new[] { CreateTask("ex1"), CreateTask("ex2") };
    await Task.WhenAll(tasks);
}

static Task CreateTask(string message)
{
    return Task.Factory.StartNew(() => { throw new Exception(message); });
}

Только одно из двух исключенийRun.

Обратите внимание, что другие вопросы по переполнению стека не решают эту конкретную проблему. Пожалуйста, будьте осторожны, предлагая дубликаты.

Ответы на вопрос(4)

Ваш ответ на вопрос