По порядку Senior Исключения в корутинах обновлено

Путь необработанного исключения из дочернего launch

Вопрос

Корневой scope.launch(handler) содержит дочерний launch, который падает. scope создан с обычным Job. Расставь события по порядку.

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

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

  1. 1
    Исключение попадает в CoroutineExceptionHandler корневой корутины
  2. 2
    Дочерний launch бросает исключение
  3. 3
    Исключение передаётся родительской корутине, она отменяет остальных детей
  4. 4
    Корневая корутина завершается с ошибкой
  5. 5
    Job scope отменяется вместе со всеми его корутинами
Показать ответ и разбор

Коротко

Ошибка идёт снизу вверх: ребёнок, родитель с отменой братьев, корень. В корне исключение обрабатывает handler.

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

  1. 1
    Дочерний launch бросает исключение
  2. 2
    Исключение передаётся родительской корутине, она отменяет остальных детей
  3. 3
    Корневая корутина завершается с ошибкой
  4. 4
    Исключение попадает в CoroutineExceptionHandler корневой корутины
  5. 5
    Job scope отменяется вместе со всеми его корутинами

Разбор

Ошибка идёт снизу вверх: ребёнок, родитель с отменой братьев, корень. В корне исключение обрабатывает handler. Поскольку у scope обычный Job, он тоже отменяется, и все остальные корутины этого scope прекращают работу. С SupervisorJob в scope последний шаг бы не произошёл.

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

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