Выбор ответа Senior async/await и Task обновлено
Когда ValueTask, а когда Task
Вопрос
Какое утверждение о ValueTask<T> верно?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Полезен при частом синхронном результате, но ждать его дважды нельзя. ValueTask<T это структура, которая может содержать готовый результат без аллокации Task.
Варианты ответа
- Всегда быстрее
Task<T>, поэтому должен быть типом по умолчанию - Его можно ожидать сколько угодно раз и из разных потоков сразу
- Полезен при частом синхронном результате, но ждать его дважды нельзяправильный ответ
- Он выполняется на стеке и потому вообще не использует пул потоков
Разбор
ValueTask<T> это структура, которая может содержать готовый результат без аллокации Task. Выгода есть, когда метод часто завершается синхронно. Ограничения: ожидать только один раз, не вызывать .Result до завершения, не ожидать конкурентно. Если нужно больше, вызывают .AsTask(). По умолчанию рекомендуют Task: он проще и безопаснее. С пулом потоков ValueTask никак не связан.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.