Как правильно отменить исключение из задачи уже в неисправном состоянии?
У меня есть синхронный метод, который, помимо прочего, проверяет состояние ожидающей задачи и сбрасывает ее исключение, если таковое имеется:
void Test(Task task)
{
// ...
if (task.IsFaulted)
throw task.Exception;
// ...
}
Это не распространяет информацию трассировки стека исключений и является недружественным для отладчика.
Теперь, еслиTest
былasync
, это не было бы так просто и естественно, как это:
async Task Test(Task task)
{
// ...
if (task.IsFaulted)
await task; // rethrow immediately and correctly
// ...
}
Вопрос: как правильно сделать это для синхронного метода? Я придумал это, но мне это не нравится
void Test(Task task)
{
// ...
if (task.IsFaulted)
new Action(async () => await task)();
// ...
}