Sobes.tech
Middle

Jak fungují konstrukce async a await v programovacím jazyce používaném pro vývoj aplikací na Android?

sobes.tech AI

Odpověď od AI

V Kotlinu, který se používá pro vývoj Androidu, jsou async a await funkce z knihovny korutin. Nejsou klíčová slova jazyka, jako v některých jiných jazycích.

async spustí novou korutinu na pozadí a vrátí objekt typu Deferred, který představuje výsledek provádění v budoucnu. Korutina, která volá async, pokračuje ve své práci, aniž by čekala na dokončení spuštěné asynchronní operace.

await je suspending funkce, která se volá na objektu Deferred. Pozastaví provádění aktuální korutiny, dokud se nespustí a nedokončí asynchronní operace zahájená pomocí async, a vrátí její výsledek. Pokud je výsledek již dostupný, await ho okamžitě vrátí.

Syntaxe:

import kotlinx.coroutines.*

suspend fun fetchUserData(): String {
    // Simulace dlouhé operace
    delay(1000)
    return "Uživatelská data"
}

suspend fun processData(data: String): String {
    // Simulace jiné dlouhé operace
    delay(2000)
    return "Zpracováno: $data"
}

suspend fun main() {
    val deferredData = CoroutineScope(Dispatchers.IO).async {
        // Asynchronní získání dat
        fetchUserData()
    }

    // Můžeme dělat jinou práci, zatímco se načítají data

    val data = deferredData.await() // Čeká na dokončení fetchUserData()

    val processedResult = withContext(Dispatchers.Default) {
        // Zpracování dat, možná na jiném vlákně
        processData(data)
    }

    println(processedResult) // Vytiskne "Zpracováno: Uživatelská data" po zpožděních
}

Hlavní body:

  • async vrací Deferred, což je "slib" výsledku.
  • await je suspending funkce, která pozastaví volající korutinu.
  • Používá se v kontextu korutin pro neblokující asynchronní operace.
  • Umožňuje spouštět více asynchronních úloh paralelně a shromažďovat jejich výsledky.