Ответ
Отмена корутины возможна, но не гарантирована автоматически. Корутина отменяется только при явной проверке isActive или вызове yield(), ensureActive(), либо при использовании отменяемых suspending-функций (например, delay()). Долгие блокирующие операции без проверки отмены могут продолжить выполняться.
Пример:
scope.launch {
while (isActive) { // явная проверка
// работа
}
}
Или с ensureActive():
scope.launch {
repeat(100) {
ensureActive() // выбросит CancellationException при отмене
// работа
}
}