Ответ
Нет, ошибка отмены (CancellationException) не пробрасывается вверх по иерархии корутин. Она обрабатывается внутренне и не вызывает завершение родительской корутины. Это сделано специально, чтобы отмена одной корутины не влияла на другие.
val parentJob = CoroutineScope(Dispatchers.IO).launch {
val childJob = launch {
delay(1000)
throw CancellationException("Child cancelled")
}
childJob.join() // Не выбросит исключение в родителя
println("Parent continues") // Выполнится
}
Однако, если корутина завершается с другой ошибкой (не CancellationException), она может быть проброшена вверх, если не обработана.