Что такое CancellationException

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

Ответ

CancellationException — это исключение, которое выбрасывается при отмене корутины. Оно сигнализирует, что выполнение было прервано, но не указывает на ошибку.

Пример:

val job = launch {
    try {
        delay(1000)
        println("Work done") // Не выполнится, если корутину отменят
    } catch (e: CancellationException) {
        println("Coroutine was cancelled") // Ловим отмену
        throw e // Перебрасываем, чтобы не подавлять отмену
    }
}
delay(500)
job.cancel() // Вызовет CancellationException

Важно:

  • Не подавляйте исключение без throw e, иначе корутина может продолжить работу.
  • Используется в withContext, delay и других suspend-функциях.
  • Отличается от других исключений — не приводит к краху, если не перехвачено.