Подтвердить что ты не робот

Что такое .NET 4.6 Task.CompletedTask?

В этом сообщении в блоге упоминаются новые API-интерфейсы задач, в том числе новый Task.CompletedTask, введенное в .NET 4.6.

Почему это было добавлено? Как это лучше, чем, скажем, Task.FromResult(whatever)?

4b9b3361

Ответ 1

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

Необычно видеть пользовательские статические завершенные задачи в текущих (4.5.2 и более старых) кодах, поэтому, на мой взгляд, имеет смысл включить его в саму структуру.