¿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)();
    // ...
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta