Ответ
Прерывание (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блок выполняется даже при отмене