Ответ 1
Task.FromResult(whatever)
работает для Task<TResult>
, но до 4.6 не было ничего для неживой задачи. Вы можете использовать FromResult
с фиктивным значением и неявно использовать его для Task
, но это несколько затуманивает намерение (вы действительно не возвращаете какое-либо асинхронное значение) и выделяете объекты под ним (тогда как CompletedTask
можно кэшировать и совместно использовать между всеми абонентами).
Необычно видеть пользовательские статические завершенные задачи в текущих (4.5.2 и более старых) кодах, поэтому, на мой взгляд, имеет смысл включить его в саму структуру.