¿Cómo volver a emitir correctamente una excepción de tarea ya en estado de falla?
Tengo un método síncrono que, entre otras cosas, verifica el estado de una tarea pendiente y vuelve a emitir su excepción, si la hay:
void Test(Task task)
{
// ...
if (task.IsFaulted)
throw task.Exception;
// ...
}
Esto no propaga la información de seguimiento de la pila de excepciones y es poco amigable para el depurador.
Ahora, si elTest
estabaasync
, no sería tan simple y natural como esto:
async Task Test(Task task)
{
// ...
if (task.IsFaulted)
await task; // rethrow immediately and correctly
// ...
}
Pregunta: ¿Cómo hacerlo bien para un método síncrono? Se me ha ocurrido esto, pero no me gusta:
void Test(Task task)
{
// ...
if (task.IsFaulted)
new Action(async () => await task)();
// ...
}