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.