Sobes.tech
Назад к вопросам
Junior — Middle
73

Как повлияет завершение дочерней корутины на родительский scope в асинхронных операциях?

Компании, где спрашивали
IBS

Ответ от нейросети

sobes.tech AI

В Kotlin Coroutines дочерняя корутина наследует контекст родительской корутины, включая её scope. Если дочерняя корутина завершается с ошибкой, то по умолчанию эта ошибка распространяется вверх и отменяет родительский scope вместе со всеми его дочерними корутинами. Это обеспечивает структурированную конкуренцию и предотвращает утечки ресурсов.

Если же дочерняя корутина завершается успешно, то это никак не влияет на родительский scope — он продолжает работать.

Пример:

val parentJob = CoroutineScope(Dispatchers.Default).launch {
    val child = launch {
        throw Exception("Ошибка в дочерней корутине")
    }
    child.join()
}

// parentJob тоже отменится из-за ошибки в child

Чтобы избежать отмены родителя при ошибках дочерних корутин, можно использовать SupervisorJob, который изолирует ошибки дочерних корутин.