Wie kann eine Ausnahme einer Aufgabe, die sich bereits in einem fehlerhaften Zustand befindet, korrekt erneut ausgelöst werden?

Ich habe eine synchrone Methode, die unter anderem den Status einer ausstehenden Aufgabe überprüft und gegebenenfalls die Ausnahme erneut auslöst:

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

Dadurch werden die Informationen zur Ablaufverfolgung des Ausnahmestapels nicht weitergegeben und der Debugger ist unfreundlich.

Nun, wenn dieTest warasyncwäre es nicht so einfach und natürlich:

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

Frage: Wie mache ich es richtig für eine synchrone Methode? Ich habe es mir ausgedacht, aber es gefällt mir nicht:

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