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