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

Ответ

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

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

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

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

Ответ 18+ 🔞

А, слушай, вот тут прикол интересный, про корутины. Представь, что у тебя есть папаша-джоб, который типа надзиратель, SupervisorJob, ну чтоб детишки-корутины друг другу не мешали. Так вот, если папаша такой, то все его детишки по умолчанию рождаются такими же надзирателями, ёпта! То есть если один сопляк-корутин накосячит и накроется медным тазом с ошибкой, то остальные братцы будут жить дальше, как ни в чём не бывало. Не будет этой цепной реакции отмены, овердохуища удобно.

Вот смотри на этот код, тут всё понятно:

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

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

Видишь? Внутри scope.launch запускается ещё один launch. Так вот этот внутренний пацан автоматом унаследует от родителя этот самый SupervisorJob. Всё, бля, по-семейному.

Но! Тут есть одна хитрая жопа, которую нужно помнить. Наследование — это не железное правило, его можно сломать. Если ты явно, с прибабахом, передашь в контекст дочерней корутины другой тип Job, например, обычный, то наследование нахуй слетает. Ты как бы говоришь системе: «Знаешь что? Не слушай ты моего папашу, вот тебе новый начальник». И всё, приехали. Дочерняя корутина будет жить по новым правилам. Так что, чувак, будь осторожен, не переопредели случайно там, где не надо, а то потом волнение ебать — почему всё поломалось.