Ответ
Да, дочерние корутины отменяются при отмене родительской. Это происходит рекурсивно: отмена родителя приводит к отмене всех его дочерних корутин. Однако важно учитывать:
- Автоматическая отмена работает только для корутин, созданных через
launchилиasyncв рамках одногоCoroutineScope. - Обработка отмены: дочерняя корутина может обработать
CancellationExceptionи продолжить работу, если не проверяетisActive.
Пример:
val parentJob = CoroutineScope(Dispatchers.IO).launch {
launch { // дочерняя корутина
delay(1000)
println("Это не выполнится") // отменяется вместе с родителем
}
}
parentJob.cancel() // отменяет и дочернюю корутину