Последующие действия: Есть ли аккуратный способ убедиться, что задача ожидалась?
Если вам нужен индивидуальный, более детальный, чем TaskScheduler.UnobservedTaskException
контроль над исключениями, создаваемыми задач, которые вы не выполняете await
, для этого есть удобный инструмент: async void
методы.
Ваш код может выглядеть следующим образом:
static async void Observe(Task task)
{
// use try/catch here if desired so;
// otherwise, exceptions will be thrown out-of-band, i.e.
// via SyncronizationContext.Post or
// via ThreadPool.QueueUSerWorkItem (if there's no sync. context)
await task;
}
// ...
var taskObserved = false;
var task = DoSomething()
try
{
bool ready = await DoSomethingElse();
if (!ready)
return null;
var value = await DoThirdThing(); // depends on DoSomethingElse
taskObserved = true;
return value + await task;
}
finally
{
if (!taskObserved)
Observe(task);
}