Выбор ответа Junior Корутины и structured concurrency обновлено

runBlocking на главном потоке Android

Вопрос

Что будет, если вызвать runBlocking { api.load() } в onCreate Activity?

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

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

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

Коротко

Правильный ответ: Главный поток встанет до конца запроса, будет ANR. runBlocking блокирует текущий поток до завершения всех корутин внутри.

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

  1. Ничего плохого: runBlocking неблокирующий
  2. Главный поток встанет до конца запроса, будет ANRправильный ответ
  3. Не скомпилируется: нужен suspend-контекст
  4. Запрос автоматически уйдёт на Dispatchers.IO

Разбор

runBlocking блокирует текущий поток до завершения всех корутин внутри. В onCreate это главный поток: интерфейс замирает, а через 5 секунд без реакции на ввод система покажет ANR. runBlocking нужен в main(), тестах и мостах с блокирующим кодом. Компилируется он везде, диспетчер сам не меняет.

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

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