Sobes.tech
Junior — Middle

Kāda ir atšķirība starp asinhrono funkciju izmantošanu ar atslēgvārdu async un launch izsaukumu asinhronajā programmēšanas kontekstā?

sobes.tech AI

Atbilde no AI

Atslēgvārds async tiek izmantots asinhronas funkcijas deklarēšanai, kas atgriež objektu Deferred vai Job un var tikt pārtraukts ar iekšējām suspend funkcijām. Šādas funkcijas izsaukums nesāk to automātiski, bet atgriež atliktu rezultātu, ko var iegūt ar await.

launch ir funkcija, kas sāk jaunu korutinu un nekavējoties sāk tās izpildi. Tā atgriež Job objektu, ko var izmantot korutinas dzīves cikla pārvaldībai (piemēram, atceļot).

Piemērs:

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

fun main() = runBlocking {
    // async atgriež Deferred, izpilde sākas nekavējoties
    val deferred = async { fetchData() }
    println("Veicu citu darbu")
    val result = deferred.await() // gaida rezultātu
    println(result)

    // launch sāk korutinu, bet neatgriež rezultātu
    val job = launch {
        val data = fetchData()
        println(data)
    }
    job.join() // gaida pabeigšanu
}

Kopsavilkums:

  • async tiek izmantots, lai uzsāktu asinhronu operāciju ar rezultātu.
  • launch uzsāk korutinu bez atgrieztās vērtības, fonu uzdevumiem.
  • async atgriež Deferred, launchJob.