Назад к вопросам
Rutube
Junior — Middle
81
Каким способом происходит отмена выполнения корутин в асинхронном программировании?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Отмена корутин в Kotlin происходит через механизм Job. Каждая корутина запускается с привязанным объектом Job, который можно отменить вызовом cancel(). При отмене корутина получает исключение CancellationException, что позволяет ей корректно завершить работу.
Основные моменты:
- Для отмены вызывают
job.cancel(). - Внутри корутины нужно периодически проверять отмену с помощью
isActiveили использовать отменяемые функции (например,delay(),yield()), которые выбрасываютCancellationException. - Если корутина не обрабатывает отмену, она может продолжить работу, поэтому важно писать отменяемый код.
Пример:
val job = CoroutineScope(Dispatchers.Default).launch {
repeat(1000) { i ->
if (!isActive) return@launch // проверка отмены
println("Работаю $i")
delay(500) // отменяемая функция
}
}
delay(1300)
job.cancel() // отмена корутины
job.join() // ожидание завершения
println("Корутина отменена")
Таким образом, отмена — это cooperative cancellation: корутина должна сама корректно реагировать на сигнал отмены.