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.