Что вернуть из неасинхронного метода с задачей в качестве возвращаемого типа?
Предположим, что у меня есть метод, который не является асинхронным, но возвращает Task
(поскольку определение относится к интерфейсу, предназначенному также для асинхронных реализаций)
public Task DoWorkAsync(Guid id)
{
// do the work
return ...;
}
Каков лучший объект для возврата? Мои текущие параметры:
return Task.Yield();
return Task.FromResult<object>(null);
// any of the other but cached in a static field and reused.
Ответы
Ответ 1
Вы не можете вернуть Task.Yield()
, это не Task
, а YieldAwaitable
для использования с await
, и он фактически вводит асинхронность (я добавил несколько подробнее здесь).
Я использую Task.FromResult(Type.Missing)
для этой цели. Возможно, наиболее эффективным, хотя и недокументированным вариантом является Task.Delay(0)
, он возвращает статическую завершенную задачу.
Ответ 2
В Microsoft.net 4.6 класс Task имеет статическое свойство для этой цели.
Task.CompletedTask
https://msdn.microsoft.com/en-us/library/system.threading.tasks.task.completedtask(v=vs.110).aspx