Вопрос проверяет знание механизмов отмены корутин и лучших практик.
Для отмены корутин используйте:
job.cancel() — явная отмена.
CoroutineScope.cancel() — отмена всех корутин в скоупе.
Проверку isActive внутри корутины для graceful shutdown.
1. Способы отмены:
Явная отмена через Job:
val job = launch { ... }
job.cancel() Отмена всего скоупа:
val scope = CoroutineScope(Job())
scope.cancel() // Отменяет все корутины внутри 2. Graceful-отмена:
Проверка isActive в долгих операциях:
launch {
while (isActive) {
// Делаем работу
}
} Использование yield() для проверки отмены в CPU-intensive задачах.
3. Обработка отмены:
Блок try {...} finally {...} для освобождения ресурсов:
launch {
try {
delay(1000)
} finally {
println("Корутина отменена, но ресурсы очищены")
}
}