Выбор ответа Middle async/await и Task обновлено

Task.Run в ASP.NET Core

Вопрос

В контроллере ASP.NET Core пишут return await Task.Run(() => _repo.GetUsersAsync());. Что это даёт?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Ничего полезного: только лишнее переключение потока пула. В ASP.NET Core каждый запрос и так выполняется на потоке пула, контекста синхронизации нет.

Варианты ответа

  1. Ускоряет обработку: запрос выполнится на отдельном ядре
  2. Ничего полезного: только лишнее переключение потока пулаправильный ответ
  3. Защищает от дедлоков SynchronizationContext в ASP.NET Core
  4. Позволяет серверу обработать больше одновременных запросов

Разбор

В ASP.NET Core каждый запрос и так выполняется на потоке пула, контекста синхронизации нет. Task.Run для уже асинхронного I/O только перекладывает работу на другой поток пула и добавляет накладные расходы. Пропускная способность от этого не растёт, а иногда падает. Task.Run нужен в UI, чтобы унести CPU-работу с UI-потока.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме