Выбор ответа Senior Исключения в корутинах обновлено

CancellationException и родитель

Вопрос

Что происходит с родителем, если дочерняя корутина завершилась CancellationException?

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

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Ничего: отмена это нормальное завершение. CancellationException это механизм отмены, а не ошибка.

Варианты ответа

  1. Родитель отменяется, как при любой ошибке ребёнка
  2. Ничего: отмена это нормальное завершениеправильный ответ
  3. Приложение падает с необработанным исключением
  4. Исключение попадает в CoroutineExceptionHandler

Разбор

CancellationException это механизм отмены, а не ошибка. Отменённый ребёнок не отменяет родителя и братьев, обработчики исключений его игнорируют. Поэтому его нельзя проглатывать (корутина не завершится) и нельзя использовать для сигнализации ошибок: withTimeout бросает TimeoutCancellationException, и если его не поймать внутри, родитель просто продолжит работу, будто ничего не было.

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

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