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