Sobes.tech
Junior — Middle

Kas on võimalik saada launch funktsiooni täitmise tulemust sünkroonilises režiimis?

sobes.tech AI

Vastus AI-lt

Kotlin Coroutines funktsioon launch käivitab uue korutina ja tagastab kohe Job objekti. See ei blokeeri praegust niiti ja ei tagasta käivitava funktsiooni tulemust. Otse launch-ist tulemust sünkrooniliselt saada ei ole võimalik, kuna launch on mõeldud ülesannete käivitamiseks, mis ei tagasta väärtusi.

Kui soovite saada asünkroonse operatsiooni tulemust, kasutage async, mis tagastab Deferred<T>. Seejärel saate kutsuda await(), et tulemust saada, kuid await() on suspend-funktsioon ja ei blokeeri niiti, vaid ainult peatab korutina.

Näide:

val job = launch {
    // asünkroonne ülesanne
}
// job ei sisalda tulemust

val deferred = async {
    // arvutus tulemusega
    42
}
runBlocking {
    val result = deferred.await() // tulemuse saamine
    println(result) // 42
}

Seega ei ole võimalik launch-ist tulemust sünkrooniliselt saada, selleks kasutatakse async + await.