Sobes.tech
Назад к вопросам
Junior — Middle
81

Каким способом происходит отмена выполнения корутин в асинхронном программировании?

Компании, где спрашивали
RutubeRutube

Ответ от нейросети

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: корутина должна сама корректно реагировать на сигнал отмены.