Junior — Middle
Je možné získať výsledok vykonania funkcie launch synchronne?
sobes.tech AI
Odpoveď od AI
Funkcia launch v Kotlin Coroutines spúšťa novú korutinu a okamžite vracia objekt Job. Neblokuje aktuálne vlákno a nevracia výsledok funkcie, ktorú spúšťa. Priamo získať výsledok z launch synchronne nie je možné, pretože launch je určená na spúšťanie úloh, ktoré nevracajú hodnoty.
Ak chcete získať výsledok asynchrónnej operácie, mali by ste použiť async, ktoré vracia Deferred<T>. Následne môžete zavolať await() na získanie výsledku, ale await() je suspendná (suspend) funkcia a neblokuje vlákno, iba pozastaví korutinu.
Príklad:
val job = launch {
// asynchrónna úloha
}
// job neobsahuje výsledok
val deferred = async {
// výpočet s výsledkom
42
}
runBlocking {
val result = deferred.await() // získanie výsledku
println(result) // 42
}
Preto nie je možné získať výsledok z launch synchronne, na to slúži async + await.