Sobes.tech
Middle

Kaip veikia async ir await konstrukcijos programavimo kalboje, naudojamoje Android programoms kurti?

sobes.tech AI

Atsakymas iš AI

Kotlin'e, kuris naudojamas Android kūrimui, async ir await yra korutinų bibliotekos funkcijos. Jie nėra kalbos raktažodžiai kaip kai kuriose kitose kalbose.

async paleidžia naują korutiną foniniame režime ir grąžina Deferred tipo objektą, kuris atstovauja būsimą vykdymo rezultatą. async iškvietęs korutinas tęsia savo darbą, nesulaukdamas pradėtos asinchroninės operacijos pabaigos.

await yra sustabdanti funkcija, kuri iškviečiama Deferred objekte. Ji sustabdo esamą korutiną tol, kol async pradėta asinchroninė operacija nesibaigs ir negrąžins savo rezultato. Jei rezultatas jau pasiekiamas, await jį grąžina nedelsiant.

Sintaksė:

import kotlinx.coroutines.*

suspend fun fetchUserData(): String {
    // Ilgos operacijos imitacija
    delay(1000)
    return "User Data"
}

suspend fun processData(data: String): String {
    // Kitos ilgos operacijos imitacija
    delay(2000)
    return "Processed: $data"
}

suspend fun main() {
    val deferredData = CoroutineScope(Dispatchers.IO).async {
        // Gauti duomenis asinchroniškai
        fetchUserData()
    }

    // Gali būti atliekamas kitas darbas, kol duomenys kraunasi

    val data = deferredData.await() // Laukiame fetchUserData() pabaigos

    val processedResult = withContext(Dispatchers.Default) {
        // Apdorojame duomenis, galbūt kitame sraute
        processData(data)
    }

    println(processedResult) // Išves "Processed: User Data" po vėlavimų
}

Pagrindiniai punktai:

  • async grąžina Deferred, kuris yra "žadėjimas" rezultato.
  • await yra sustabdanti funkcija ir sustabdo kviečiančią korutiną.
  • Naudojama korutinų kontekste, skirta neblokuojančioms asinchroninėms operacijoms.
  • Leidžia vykdyti kelis asinchroninius užduotis vienu metu ir rinkti jų rezultatus.