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