Что произойдет, если я не жду задание?

26
задан enzi 12 October 2015 в 16:53
поделиться

1 ответ

Последующие действия: Есть ли аккуратный способ убедиться, что задача ожидалась?

Если вам нужен индивидуальный, более детальный, чем 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);
 }

Некоторые подробности можно найти здесь и здесь .

1
ответ дан Community 12 October 2015 в 16:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: