Sobes.tech
Middle

Ako fungujú konštrukcie async a await v programovacom jazyku používanom na vývoj aplikácií pre Android?

sobes.tech AI

Odpoveď od AI

V Kotlin, ktorý sa používa na vývoj Androidu, sú async a await funkcie z knižnice korutín. Nie sú to kľúčové slová jazyka, ako v niektorých iných jazykoch.

async spustí novú korutínu na pozadí a vráti objekt typu Deferred, ktorý predstavuje výsledok vykonania v budúcnosti. Korutína, ktorá volala async, pokračuje vo svojej práci bez čakania na dokončenie spustenej asynchrónnej operácie.

await je suspending funkcia, ktorá sa volá na objekte Deferred. Pozastaví vykonávanie aktuálnej korutiny, kým sa asynchrónna operácia spustená pomocou async nedokončí a nevráti svoj výsledok. Ak je výsledok už dostupný, await ho okamžite vráti.

Syntax:

import kotlinx.coroutines.*

suspend fun fetchUserData(): String {
    // Simulácia dlhého procesu
    delay(1000)
    return "Údaje používateľa"
}

suspend fun processData(data: String): String {
    // Simulácia iného dlhého procesu
    delay(2000)
    return "Spracované: $data"
}

suspend fun main() {
    val deferredData = CoroutineScope(Dispatchers.IO).async {
        // Asynchrónne získavanie dát
        fetchUserData()
    }

    // Môžeme vykonávať inú prácu, kým sa načítavajú dáta

    val data = deferredData.await() // Čaká na dokončenie fetchUserData()

    val processedResult = withContext(Dispatchers.Default) {
        // Spracovanie dát, pravdepodobne na inom vlákne
        processData(data)
    }

    println(processedResult) // Vytlačí "Spracované: Údaje používateľa" po oneskoreniach
}

Hlavné body:

  • async vracia Deferred, čo je "sľub" výsledku.
  • await je suspending funkcia, ktorá pozastaví volajúcu korutinu.
  • Používa sa v kontexte korutín pre neblokujúce asynchrónne operácie.
  • Umožňuje spúšťanie viacerých asynchrónnych úloh paralelne a zber ich výsledkov.