Sobes.tech
Middle

Kako funkcionišu konstrukti async i await u programskom jeziku koji se koristi za razvoj aplikacija za Android?

sobes.tech АИ

Одговор од АИ

U Kotlinu, koji se koristi za Android razvoj, async i await su funkcije iz biblioteke korutina. One nisu ključne reči jezika, kao u nekim drugim jezicima.

async pokreće novu korutinu u pozadini i vraća objekat tipa Deferred, koji predstavlja rezultat izvršenja u budućnosti. Korutina koja je pozvala async nastavlja svoj rad, ne čekajući završetak pokrenute asinhrone operacije.

await je suspending funkcija koja se poziva na Deferred objektu. Ona zaustavlja izvršenje trenutne korutine dok se asinhrona operacija pokrenuta pomoću async ne završi i ne vrati svoj rezultat. Ako je rezultat već dostupan, await ga odmah vraća.

Sintaksa:

import kotlinx.coroutines.*

suspend fun fetchUserData(): String {
    // Simulacija duge operacije
    delay(1000)
    return "Podaci o korisniku"
}

suspend fun processData(data: String): String {
    // Simulacija druge duge operacije
    delay(2000)
    return "Obrađeno: $data"
}

suspend fun main() {
    val deferredData = CoroutineScope(Dispatchers.IO).async {
        // Asinhrono dobijanje podataka
        fetchUserData()
    }

    // Možemo obaviti drugi posao dok se podaci učitavaju

    val data = deferredData.await() // Čekamo završetak fetchUserData()

    val processedResult = withContext(Dispatchers.Default) {
        // Obrada podataka, možda na drugom thread-u
        processData(data)
    }

    println(processedResult) // Ispisaće "Obrađeno: Podaci o korisniku" nakon kašnjenja
}

Ključne tačke:

  • async vraća Deferred, koji je "obećanje" rezultata.
  • await je suspending funkcija koja zaustavlja pozivajuću korutinu.
  • Koristi se u kontekstu korutina za neblokirajuće asinhrone operacije.
  • Omogućava paralelno izvršavanje više asinhronih zadataka i prikupljanje njihovih rezultata.