Что вернуть из неасинхронного метода с задачей в качестве возвращаемого типа?

Предположим, что у меня есть метод, который не является асинхронным, но возвращает 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), он возвращает статическую завершенную задачу.