Выбор ответа Junior Корутины и structured concurrency обновлено
runBlocking на главном потоке Android
Вопрос
Что будет, если вызвать runBlocking { api.load() } в onCreate Activity?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Главный поток встанет до конца запроса, будет ANR. runBlocking блокирует текущий поток до завершения всех корутин внутри.
Варианты ответа
- Ничего плохого:
runBlockingнеблокирующий - Главный поток встанет до конца запроса, будет ANRправильный ответ
- Не скомпилируется: нужен suspend-контекст
- Запрос автоматически уйдёт на
Dispatchers.IO
Разбор
runBlocking блокирует текущий поток до завершения всех корутин внутри. В onCreate это главный поток: интерфейс замирает, а через 5 секунд без реакции на ввод система покажет ANR. runBlocking нужен в main(), тестах и мостах с блокирующим кодом. Компилируется он везде, диспетчер сам не меняет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.