Jak poprawnie powtórzyć wyjątek zadania już w stanie błędu?

Mam metodę synchroniczną, która między innymi sprawdza status oczekującego zadania i ponownie rzuca wyjątek, jeśli taki istnieje:

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

To nie propaguje informacji o śledzeniu stosu wyjątków i jest nieprzyjazne dla debugera.

Teraz, jeśliTest byłoasync, nie byłoby tak proste i naturalne jak to:

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

Pytanie: jak zrobić to dobrze dla metody synchronicznej? Wymyśliłem to, ale mi się to nie podoba:

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

questionAnswers(1)

yourAnswerToTheQuestion