По порядку Middle Корутины и structured concurrency обновлено
Порядок событий при ошибке в дочерней корутине
Вопрос
В coroutineScope запущены две дочерние корутины, первая падает с исключением. Расставь события по порядку.
Попробуйте сами
Расставьте шаги по порядку стрелками.
- 1Родитель отменяет вторую дочернюю корутину
- 2Исключение передаётся родительскому Job
- 3Первая дочерняя корутина бросает исключение
- 4coroutineScope пробрасывает исключение вызывающему коду
- 5Вторая корутина получает CancellationException в ближайшей точке приостановки
Показать ответ и разбор
Коротко
В обычном Job ошибка ребёнка всплывает к родителю. Родитель отменяет себя и всех остальных детей, они прерываются в точках приостановки.
Правильный порядок
- 1Первая дочерняя корутина бросает исключение
- 2Исключение передаётся родительскому Job
- 3Родитель отменяет вторую дочернюю корутину
- 4Вторая корутина получает CancellationException в ближайшей точке приостановки
- 5coroutineScope пробрасывает исключение вызывающему коду
Разбор
В обычном Job ошибка ребёнка всплывает к родителю. Родитель отменяет себя и всех остальных детей, они прерываются в точках приостановки. Когда все дети завершились, coroutineScope бросает исходное исключение наружу. С supervisorScope второй и третий шаги не происходят.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.