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