Como relançar corretamente uma exceção de tarefa já em estado com falha?

Eu tenho um método síncrono que, entre outras coisas, verifica o status de uma tarefa pendente e relança sua exceção, se houver:

void Test(Task task)
{
    // ...
    if (task.IsFaulted)
        throw task.Exception;
    // ...
}

Isso não propaga as informações de rastreamento de pilha de exceção e é hostil ao depurador.

Agora, se oTest estavaasync, não seria tão simples e natural como isto:

async Task Test(Task task)
{
    // ...
    if (task.IsFaulted)
        await task; // rethrow immediately and correctly
    // ...
}

Pergunta: como fazer isso certo para um método síncrono? Eu vim com isso, mas eu não gosto disso:

void Test(Task task)
{
    // ...
    if (task.IsFaulted)
        new Action(async () => await task)();
    // ...
}