Выбор ответа Middle async/await и Task обновлено
Task.Run в ASP.NET Core
Вопрос
В контроллере ASP.NET Core пишут return await Task.Run(() => _repo.GetUsersAsync());. Что это даёт?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Ничего полезного: только лишнее переключение потока пула. В ASP.NET Core каждый запрос и так выполняется на потоке пула, контекста синхронизации нет.
Варианты ответа
- Ускоряет обработку: запрос выполнится на отдельном ядре
- Ничего полезного: только лишнее переключение потока пулаправильный ответ
- Защищает от дедлоков SynchronizationContext в ASP.NET Core
- Позволяет серверу обработать больше одновременных запросов
Разбор
В ASP.NET Core каждый запрос и так выполняется на потоке пула, контекста синхронизации нет. Task.Run для уже асинхронного I/O только перекладывает работу на другой поток пула и добавляет накладные расходы. Пропускная способность от этого не растёт, а иногда падает. Task.Run нужен в UI, чтобы унести CPU-работу с UI-потока.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.