Что произойдет с родительским scope если завершится дочерняя корутина

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

Ответ

Если дочерняя корутина завершится (нормально или с ошибкой), это не повлияет напрямую на родительский scope. Однако, если родительская корутина была отменена (например, через job.cancel()), то все дочерние корутины также будут отменены. Это поведение по умолчанию в CoroutineScope.

Пример:

val parentJob = CoroutineScope(Dispatchers.IO).launch {
    val childJob = launch {
        delay(1000)
        println("Child done")
    }
    delay(500)
    childJob.cancel() // Отменяем только дочернюю корутину
    println("Parent continues")
}

Здесь родительская корутина продолжит работу после отмены дочерней. Но если отменить parentJob, то childJob тоже автоматически отменится.