Может ли корутина продолжить работу после отмены скоупа

«Может ли корутина продолжить работу после отмены скоупа» — вопрос из категории Coroutines и Flow, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, корутина не может продолжить работу после отмены скоупа, если она корректно обрабатывает отмену. При отмене скоупа все дочерние корутины также отменяются. Однако, если корутина игнорирует isActive или не проверяет ensureActive(), она может продолжать выполнение до завершения своей работы.

scope.launch {
    try {
        while (true) {
            delay(1000)
            println("Still running") // Будет работать, пока не проверит isActive
        }
    } finally {
        println("Cancelled") // Выполнится при отмене
    }
}
scope.cancel() // Прервёт корутину

Для корректной отмены используйте ensureActive() или проверяйте isActive.