Пробрасывается ли ошибка отмены корутины вверх всегда в корутинах

«Пробрасывается ли ошибка отмены корутины вверх всегда в корутинах» — вопрос из категории Coroutines и Flow, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, ошибка отмены (CancellationException) не пробрасывается вверх по иерархии корутин. Она обрабатывается внутренне и не вызывает завершение родительской корутины. Это сделано специально, чтобы отмена одной корутины не влияла на другие.

val parentJob = CoroutineScope(Dispatchers.IO).launch {
    val childJob = launch {
        delay(1000)
        throw CancellationException("Child cancelled")
    }
    childJob.join() // Не выбросит исключение в родителя
    println("Parent continues") // Выполнится
}

Однако, если корутина завершается с другой ошибкой (не CancellationException), она может быть проброшена вверх, если не обработана.