Почему 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?