Sobes.tech
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.