Sobes.tech
Junior — Middle

Da li je moguće dobiti rezultat izvršenja funkcije launch sinhrono?

sobes.tech АИ

Одговор од АИ

Funkcija launch u Kotlin Coroutines pokreće novu korutinu i odmah vraća objekat Job. Ne blokira trenutnu nit i ne vraća rezultat funkcije koju pokreće. Direktno dobijanje rezultata iz launch u sinhronom režimu nije moguće, jer je launch namenjena za pokretanje zadataka koji ne vraćaju vrednosti.

Ako želite da dobijete rezultat asinhrone operacije, treba da koristite async, koji vraća Deferred<T>. Tada možete pozvati await() za dobijanje rezultata, ali await() je suspend funkcija i ne blokira nit, već samo suspenduje korutinu.

Primer:

val job = launch {
    // asinhroni zadatak
}
// job ne sadrži rezultat

val deferred = async {
    // računanje sa rezultatom
    42
}
runBlocking {
    val result = deferred.await() // dobijanje rezultata
    println(result) // 42
}

Dakle, rezultat iz launch se ne može dobiti sinhrono, za to se koristi async + await.