Какой экземпляр Job будет у дочерней корутины если в родительской SupervisorJob

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

Ответ

Дочерняя корутина наследует тип Job родителя. Если родитель использует SupervisorJob, дочерняя корутина также получит SupervisorJob. Это означает, что ошибка в одной дочерней корутине не отменит другие дочерние корутины.

val parentJob = SupervisorJob()
val scope = CoroutineScope(Dispatchers.IO + parentJob)

scope.launch {
    // Эта корутина тоже будет иметь SupervisorJob
    launch {
        // Дочерняя корутина с SupervisorJob
    }
}

Важно: если явно передать другой тип Job в контексте дочерней корутины, это переопределит наследование.