Выбор ответа Middle Исключения в корутинах обновлено
Какой Job у viewModelScope
Вопрос
Что будет с другими корутинами viewModelScope, если одна из них упадёт с необработанным исключением?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Продолжат работу (там SupervisorJob), но приложение упадёт. viewModelScope устроен как SupervisorJob() + Dispatchers.Main.immediate, поэтому соседние корутины не отменяются.
Варианты ответа
- Продолжат работу (там
SupervisorJob), но приложение упадётправильный ответ - Все корутины
viewModelScopeбудут отменены вслед за упавшей - Исключение будет проглочено scope без следа и без падения
- ViewModel пересоздастся вместе со своим
viewModelScope
Разбор
viewModelScope устроен как SupervisorJob() + Dispatchers.Main.immediate, поэтому соседние корутины не отменяются. Но изоляция не значит обработку: необработанное исключение корневого launch уйдёт в Thread.uncaughtExceptionHandler, и приложение упадёт. Ошибки нужно ловить внутри корутины или ставить CoroutineExceptionHandler. ViewModel сама не пересоздаётся.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Исключения в корутинах»
- Ошибка в async и try вокруг await
- CancellationException и родитель
- Где работает CoroutineExceptionHandler
- Ошибки в launch и async
- Распространение исключений
- CoroutineExceptionHandler в дочерней корутине
- launch(SupervisorJob()) внутри scope
- Путь необработанного исключения из дочернего launch