Sobes.tech
Junior — Middle

Aký je rozdiel medzi používaním asynchrónnych funkcií s kľúčovým slovom async a volaním launch v kontexte asynchrónneho programovania?

sobes.tech AI

Odpoveď od AI

Kľúčové slovo async sa používa na deklaráciu asynchrónnej funkcie, ktorá vracia objekt typu Deferred alebo Job a môže byť pozastavená pomocou vnútorných funkcií suspend. Volanie takejto funkcie ju nespustí automaticky, ale vráti odložený výsledok, ktorý je možné získať pomocou await.

launch je funkcia, ktorá spúšťa novú korutinu a okamžite začína jej vykonávanie. Vráti objekt Job, ktorý možno použiť na riadenie životného cyklu korutiny (napríklad zrušenie).

Príklad:

suspend fun fetchData(): String {
    delay(1000)
    return "Dáta"
}

fun main() = runBlocking {
    // async vracia Deferred, vykonávanie začína okamžite
    val deferred = async { fetchData() }
    println("Robím inú prácu")
    val result = deferred.await() // čaká na výsledok
    println(result)

    // launch spúšťa korutinu, ale nevracia výsledok
    val job = launch {
        val data = fetchData()
        println(data)
    }
    job.join() // čaká na ukončenie
}

Zhrnutie:

  • async sa používa na spustenie asynchrónnej operácie s výsledkom.
  • launch spúšťa korutinu bez návratovej hodnoty, pre úlohy na pozadí.
  • async vracia Deferred, launchJob.