Sobes.tech
Middle

Cum funcționează construcțiile async și await în limbajul de programare utilizat pentru dezvoltarea aplicațiilor Android?

sobes.tech AI

Răspuns de la AI

În Kotlin, utilizat pentru dezvoltarea Android, async și await sunt funcții din biblioteca de corutine. Nu sunt cuvinte cheie ale limbajului, ca în unele alte limbaje.

async pornește o nouă corutină în fundal și returnează un obiect de tip Deferred, care reprezintă rezultatul execuției în viitor. Corutina care a apelat async își continuă munca fără a aștepta finalizarea operației asincrone lansate.

await este o funcție suspending care se apelează pe un obiect Deferred. Ea suspendă execuția corutinei curente până când operația asincronă lansată cu async se încheie și returnează rezultatul său. Dacă rezultatul este deja disponibil, await îl returnează imediat.

Sintaxă:

import kotlinx.coroutines.*

suspend fun fetchUserData(): String {
    // Simulare a unei operații lungi
    delay(1000)
    return "Datele utilizatorului"
}

suspend fun processData(data: String): String {
    // Simulare a unei alte operații lungi
    delay(2000)
    return "Procesat: $data"
}

suspend fun main() {
    val deferredData = CoroutineScope(Dispatchers.IO).async {
        // Obține datele asincron
        fetchUserData()
    }

    // Putem face altă muncă în timp ce datele se încarcă

    val data = deferredData.await() // Așteaptă finalizarea fetchUserData()

    val processedResult = withContext(Dispatchers.Default) {
        // Procesează datele, posibil pe un alt fir
        processData(data)
    }

    println(processedResult) // Va afișa "Procesat: Datele utilizatorului" după întârzieri
}

Puncte cheie:

  • async returnează Deferred, care este o "promisiune" a rezultatului.
  • await este o funcție suspending care suspendă corutina apelantă.
  • Folosit în contextul corutinelor pentru operații asincrone non-blocante.
  • Permite executarea mai multor sarcini asincrone în paralel și colectarea rezultatelor lor.