Почему CancelationException не ловится jvm?

Изучаю корутины. Есть вот такой код:

suspend fun catchExternalCancellationInLaunch() = coroutineScope {
    val downloader: Job = launch {
        try {
            println("Начинаем загрузку файлов")
            for (i in 1..5) {
                println("Загружен файл $i")
                delay(500L)
            }
        } catch (e: CancellationException) {
            println("Загрузка файлов прервана")
        } finally {
            println("Загрузка завершена")
        }
    }
    delay(800L)
    println("Надоело ждать. Прерву-ка я загрузку...")
    downloader.cancelAndJoin()    // отменяем корутину и ожидаем ее завершения
    println("Работа программы завершена")
}

После отмены корутины генерится CancellationException которое можно отловить с помощью  try-catch. Почему оно не приводит к крашу когда убираешь try-catch?


Ответы (0 шт):