Как coroutineScope узнает об отмене Coroutine

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

Ответ

coroutineScope автоматически отменяет все дочерние корутины при отмене родительской корутины благодаря иерархической структуре. Когда родительская корутина отменяется, она распространяет CancellationException на все дочерние корутины внутри coroutineScope.

Пример:

coroutineScope {
    launch {
        try {
            delay(1000)
        } catch (e: CancellationException) {
            println("Child cancelled") // Будет вызвано при отмене
        }
    }
    throw CancellationException() // Отменяем родительскую корутину
}

Ключевые моменты:

  1. coroutineScope создает область видимости с общим Job
  2. Отмена родителя приводит к автоматической отмене всех детей
  3. Дочерние корутины получают CancellationException при отмене