По порядку Middle Корутины и structured concurrency обновлено

Порядок событий при ошибке в дочерней корутине

Вопрос

В coroutineScope запущены две дочерние корутины, первая падает с исключением. Расставь события по порядку.

Попробуйте сами

Расставьте шаги по порядку стрелками.

  1. 1
    Родитель отменяет вторую дочернюю корутину
  2. 2
    Исключение передаётся родительскому Job
  3. 3
    Первая дочерняя корутина бросает исключение
  4. 4
    coroutineScope пробрасывает исключение вызывающему коду
  5. 5
    Вторая корутина получает CancellationException в ближайшей точке приостановки
Показать ответ и разбор

Коротко

В обычном Job ошибка ребёнка всплывает к родителю. Родитель отменяет себя и всех остальных детей, они прерываются в точках приостановки.

Правильный порядок

  1. 1
    Первая дочерняя корутина бросает исключение
  2. 2
    Исключение передаётся родительскому Job
  3. 3
    Родитель отменяет вторую дочернюю корутину
  4. 4
    Вторая корутина получает CancellationException в ближайшей точке приостановки
  5. 5
    coroutineScope пробрасывает исключение вызывающему коду

Разбор

В обычном Job ошибка ребёнка всплывает к родителю. Родитель отменяет себя и всех остальных детей, они прерываются в точках приостановки. Когда все дети завершились, coroutineScope бросает исходное исключение наружу. С supervisorScope второй и третий шаги не происходят.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.