Что такое прерывание у корутин

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

Ответ

Прерывание (cancellation) в корутинах — это механизм для остановки выполнения корутины до её завершения. Корректная отмена важна для избежания утечек ресурсов.

Как работает:

  • Вызывается cancel() на Job или CoroutineScope
  • Устанавливается флаг isActive = false
  • Корутина бросает CancellationException (не ловится в try/catch)

Пример:

val job = launch {
    try {
        repeat(1000) { i ->
            ensureActive() // Проверка отмены
            delay(100)
        }
    } finally {
        // Очистка ресурсов
    }
}
job.cancel() // Прерывает выполнение

Важно:

  • Отмена кооперативна — корутина должна проверять isActive или вызывать yield()/ensureActive()
  • finally блок выполняется даже при отмене