Junior — Middle
Lze získat výsledek provedení funkce launch synchronně?
sobes.tech AI
Odpověď od AI
Funkce launch v Kotlin Coroutines spouští novou korutinu a okamžitě vrací objekt Job. Neblokuje aktuální vlákno a nevrací výsledek funkce, kterou spouští. Přímé získání výsledku z launch synchronně není možné, protože launch je určena pro spuštění úloh, které nevracejí hodnoty.
Pokud chcete získat výsledek asynchronní operace, měli byste použít async, které vrací Deferred<T>. Poté můžete zavolat await() pro získání výsledku, ale await() je suspendní (suspend) funkce a neblokuje vlákno, pouze pozastaví korutinu.
Příklad:
val job = launch {
// asynchronní úloha
}
// job neobsahuje výsledek
val deferred = async {
// výpočet s výsledkem
42
}
runBlocking {
val result = deferred.await() // získání výsledku
println(result) // 42
}
Tudíž není možné získat výsledek z launch synchronně, k tomu slouží async + await.