Выбор ответа Junior async/await и Task спрашивают часто обновлено

Создаёт ли await новый поток

Вопрос

Что происходит при await File.ReadAllTextAsync(path)?

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

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

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

Коротко

Правильный ответ: Метод отдаёт управление, поток свободен до конца ввода-вывода. await не создаёт потоков.

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

  1. Создаётся новый поток, который ждёт завершения чтения файла
  2. Метод отдаёт управление, поток свободен до конца ввода-выводаправильный ответ
  3. Текущий поток блокируется до конца чтения, но UI не зависает
  4. Чтение выполняется синхронно, await лишь меняет тип результата

Разбор

await не создаёт потоков. Если задача не завершена, метод регистрирует продолжение и возвращает управление, поток уходит заниматься другим. Когда ОС сообщит о завершении ввода-вывода, продолжение запустится на пуле потоков или в захваченном контексте. Блокировки нет, в этом весь смысл асинхронности для I/O. Отдельный поток занимает только Task.Run для CPU-работы.

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

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

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