Sobes.tech
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 async egy aszinkron műveletet indít eredménnyel.
  • A launch egy háttérfeladatokat végző coroutine-t indít eredmény nélkül.
  • Az async Deferred-et ad vissza, a launch pedig Job-ot.