Выбор ответа Middle Исключения в корутинах обновлено

Какой Job у viewModelScope

Вопрос

Что будет с другими корутинами viewModelScope, если одна из них упадёт с необработанным исключением?

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

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

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

Коротко

Правильный ответ: Продолжат работу (там SupervisorJob), но приложение упадёт. viewModelScope устроен как SupervisorJob() + Dispatchers.Main.immediate, поэтому соседние корутины не отменяются.

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

  1. Продолжат работу (там SupervisorJob), но приложение упадётправильный ответ
  2. Все корутины viewModelScope будут отменены вслед за упавшей
  3. Исключение будет проглочено scope без следа и без падения
  4. ViewModel пересоздастся вместе со своим viewModelScope

Разбор

viewModelScope устроен как SupervisorJob() + Dispatchers.Main.immediate, поэтому соседние корутины не отменяются. Но изоляция не значит обработку: необработанное исключение корневого launch уйдёт в Thread.uncaughtExceptionHandler, и приложение упадёт. Ошибки нужно ловить внутри корутины или ставить CoroutineExceptionHandler. ViewModel сама не пересоздаётся.

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

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