Sobes.tech
Junior — Middle

Czy korutyna nadrzędna może zakończyć się wcześniej niż jej podrzędna korutyna uruchomiona w jej ramach?

sobes.tech AI

Odpowiedź od AI

W Kotlinie, korutyna rodzica może zakończyć się wcześniej niż korutyna dziecka, jeśli korutyna dziecka jest uruchomiona w innym kontekście lub w zakresie globalnym.

Jednakże, jeśli korutyna dziecka jest uruchomiona w kontekście rodzica (np. przez launch w CoroutineScope rodzica), to korutyna rodzica będzie czekać na zakończenie korutyn dziecięcych i zakończy się później lub równocześnie z nimi.

Przykład:

runBlocking {
    val job = launch {
        launch {
            delay(1000)
            println("Korutyna dziecka zakończona")
        }
        println("Korutyna rodzica zakończona")
    }
    job.join()
}

W tym przykładzie, korutyna rodzica nie zakończy się, dopóki korutyny dziecięce nie zostaną zakończone.

Jeśli natomiast korutyna dziecka jest uruchomiona w GlobalScope, to korutyna rodzica może zakończyć się wcześniej.