Sobes.tech
Junior — Middle

Kuo skiriasi asinchroninių funkcijų naudojimas su raktu async nuo launch iškvietimo asinchroninio programavimo kontekste?

sobes.tech AI

Atsakymas iš AI

Raktinis žodis async naudojamas asinchroninės funkcijos deklaravimui, kuri grąžina objektą Deferred arba Job ir gali būti sustabdyta naudojant vidines suspend funkcijas. Tokios funkcijos kvietimas nesukelia jos automatinio paleidimo, o grąžina atidėtą rezultatą, kurį galima gauti naudojant await.

launch yra funkcija, kuri paleidžia naują korutiną ir iš karto pradeda jos vykdymą. Ji grąžina Job objektą, kurį galima naudoti korutinos gyvavimo ciklo valdymui (pavyzdžiui, atšaukti).

Pavyzdys:

suspend fun fetchData(): String {
    delay(1000)
    return "Duomenys"
}

fun main() = runBlocking {
    // async grąžina Deferred, vykdymas prasideda iš karto
    val deferred = async { fetchData() }
    println("Atliekama kita užduotis")
    val result = deferred.await() // laukiame rezultato
    println(result)

    // launch paleidžia korutiną, bet negrąžina rezultato
    val job = launch {
        val data = fetchData()
        println(data)
    }
    job.join() // laukiame pabaigos
}

Santrauka:

  • async naudojamas pradėti asinchroninę operaciją su rezultatu.
  • launch pradeda korutiną be grąžinamos reikšmės, foniniams darbams.
  • async grąžina Deferred, launchJob.