Junior — Middle
Mi a különbség az async kulcsszóval ellátott aszinkron függvények használata és a launch hívása között az aszinkron programozás kontextusában?
sobes.tech MI
Válasz az MI-től
Az async kulcsszó egy aszinkron függvény deklarálására szolgál, amely Deferred vagy Job típusú objektumot ad vissza, és belső suspend függvények segítségével szüneteltethető. Egy ilyen függvény hívása nem indítja el automatikusan, hanem késleltetett eredményt ad vissza, amelyet await segítségével lehet megszerezni.
A launch egy olyan függvény, amely új coroutine-t indít és azonnal elindítja annak végrehajtását. Egy Job objektumot ad vissza, amelyet a coroutine életciklusának kezelésére lehet használni (például megszakítására).
Példa:
suspend fun fetchData(): String {
delay(1000)
return "Adatok"
}
fun main() = runBlocking {
// async egy Deferred-et ad vissza, a végrehajtás azonnal megkezdődik
val deferred = async { fetchData() }
println("Más munka végzése")
val result = deferred.await() // eredmény várása
println(result)
// launch elindít egy coroutine-t, de nem ad vissza eredményt
val job = launch {
val data = fetchData()
println(data)
}
job.join() // várakozás a befejezésre
}
Összefoglalva:
- Az
asyncegy aszinkron műveletet indít eredménnyel. - A
launchegy háttérfeladatokat végző coroutine-t indít eredmény nélkül. - Az
asyncDeferred-et ad vissza, alaunchpedigJob-ot.