Quiero esperar a lanzar AggregateException, no solo la primera excepción

Cuando se espera una tarea con fallas (una que tiene un conjunto de excepciones),await volverá a lanzar la excepción almacenada. Si la excepción almacenada es unaAggregateException volverá a lanzar el primero y desechará el resto.

Como podemos usarawait y al mismo tiempo tirar el original.AggregateException ¿Para que no perdamos accidentalmente información de error?

Tenga en cuenta que, por supuesto, es posible pensar en soluciones piratas para esto (por ejemplo, probar y capturar alrededor delawait, luego llameTask.Wait). Realmente deseo encontrar una solución limpia.¿Cuál es la mejor práctica aquí?

Pensé en usar un monitor personalizado pero el incorporadoTaskAwaiter contiene mucha magia que no estoy seguro de cómo reproducir completamente. Llama a las API internas en los tipos TPL. yo tampocoquerer para reproducir todo eso.

Aquí hay un breve repro si quieres jugar con él:

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

Solo una de las dos excepciones es lanzadaRun.

Tenga en cuenta que otras preguntas sobre el desbordamiento de pila no abordan este problema específico. Por favor tenga cuidado al sugerir duplicados.

Respuestas a la pregunta(4)

Su respuesta a la pregunta