Я хочу дождаться, чтобы сгенерировать 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)

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