Выбор ответа Junior async/await и Task спрашивают часто обновлено
Создаёт ли await новый поток
Вопрос
Что происходит при await File.ReadAllTextAsync(path)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Метод отдаёт управление, поток свободен до конца ввода-вывода. await не создаёт потоков.
Варианты ответа
- Создаётся новый поток, который ждёт завершения чтения файла
- Метод отдаёт управление, поток свободен до конца ввода-выводаправильный ответ
- Текущий поток блокируется до конца чтения, но UI не зависает
- Чтение выполняется синхронно,
awaitлишь меняет тип результата
Разбор
await не создаёт потоков. Если задача не завершена, метод регистрирует продолжение и возвращает управление, поток уходит заниматься другим. Когда ОС сообщит о завершении ввода-вывода, продолжение запустится на пуле потоков или в захваченном контексте. Блокировки нет, в этом весь смысл асинхронности для I/O. Отдельный поток занимает только Task.Run для CPU-работы.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
TaskCompletionSource и синхронные продолжения
Следующий вопрос
Когда ValueTask, а когда Task