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