Eu quero aguardar para lançar AggregateException, não apenas a primeira exceção

Ao aguardar uma tarefa com falha (uma que tenha um conjunto de exceções),await irá relançar a exceção armazenada. Se a exceção armazenada for umaAggregateException ele irá recriar o primeiro e descartar o resto.

Como podemos usarawait e ao mesmo tempo jogar o originalAggregateException para que não percamos acidentalmente informações de erro?

Note que é claro que é possível pensar em soluções hacky para isso (por exemplo, tentarawait, Em seguida, ligueTask.Wait). Eu realmente gostaria de encontrar uma solução limpa.Qual é a melhor prática aqui?

Eu pensei em usar um awaiter personalizado, mas o built-inTaskAwaiter contém muita magia que não sei como reproduzir totalmente. Ele chama APIs internas nos tipos de TPL. Eu também nãoquer para reproduzir tudo isso.

Aqui está uma pequena repro se você quiser brincar com ela:

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); });
}

Apenas uma das duas exceções é lançadaRun.

Observe que outras perguntas no Stack Overflow não abordam esse problema específico. Por favor, tenha cuidado ao sugerir duplicatas.

questionAnswers(4)

yourAnswerToTheQuestion