Ответ
Да, отменить запущенную Deferred можно с помощью функции cancel(). Однако, отмена работает только если корутина ещё не завершилась и поддерживает отмену (например, не выполняет блокирующий код без проверки isActive).
Пример:
val deferred = GlobalScope.async {
repeat(1000) { i ->
println("Tick $i")
delay(100)
}
}
// Через 500 мс отменяем
delay(500)
deferred.cancel()
После отмены:
deferred.isCancelledвернетtrue- При вызове
await()будет выброшеноCancellationException
Важно: отмена не прерывает поток мгновенно - корутина должна проверять isActive или использовать отменяемые функции типа delay().