Отменятся ли дочерние корутины при отмене родительской

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

Ответ

Да, дочерние корутины отменяются при отмене родительской. Это происходит рекурсивно: отмена родителя приводит к отмене всех его дочерних корутин. Однако важно учитывать:

  1. Автоматическая отмена работает только для корутин, созданных через launch или async в рамках одного CoroutineScope.
  2. Обработка отмены: дочерняя корутина может обработать CancellationException и продолжить работу, если не проверяет isActive.

Пример:

val parentJob = CoroutineScope(Dispatchers.IO).launch {
    launch { // дочерняя корутина
        delay(1000)
        println("Это не выполнится") // отменяется вместе с родителем
    }
}
parentJob.cancel() // отменяет и дочернюю корутину