Sobes.tech
Middle

Come funzionano le strutture async e await nel linguaggio di programmazione utilizzato per lo sviluppo di applicazioni Android?

sobes.tech AI

Risposta dell'AI

In Kotlin, usato per lo sviluppo Android, async e await sono funzioni della libreria di coroutine. Non sono parole chiave del linguaggio, come in alcuni altri linguaggi.

async avvia una nuova coroutine in background e restituisce un oggetto di tipo Deferred, che rappresenta il risultato dell'esecuzione in futuro. La coroutine che chiama async continua il suo lavoro senza aspettare che l'operazione asincrona avviata termini.

await è una funzione suspending chiamata su un oggetto Deferred. Essa sospende l'esecuzione della coroutine corrente fino a quando l'operazione asincrona avviata con async non si conclude e restituisce il suo risultato. Se il risultato è già disponibile, await lo restituisce immediatamente.

Sintassi:

import kotlinx.coroutines.*

suspend fun fetchUserData(): String {
    // Simulazione di un'operazione lunga
    delay(1000)
    return "Dati utente"
}

suspend fun processData(data: String): String {
    // Simulazione di un'altra operazione lunga
    delay(2000)
    return "Processato: $data"
}

suspend fun main() {
    val deferredData = CoroutineScope(Dispatchers.IO).async {
        // Ottieni dati in modo asincrono
        fetchUserData()
    }

    // Possiamo eseguire altri lavori mentre i dati vengono caricati

    val data = deferredData.await() // Attende il completamento di fetchUserData()

    val processedResult = withContext(Dispatchers.Default) {
        // Elaboriamo i dati, possibilmente su un altro thread
        processData(data)
    }

    println(processedResult) // Mostrerà "Processato: Dati utente" dopo i ritardi
}

Punti chiave:

  • async restituisce Deferred, che è una "promessa" del risultato.
  • await è una funzione suspending che sospende la coroutine chiamante.
  • Utilizzato nel contesto delle coroutine per operazioni asincrone non bloccanti.
  • Permette di eseguire più compiti asincroni in parallelo e di raccogliere i loro risultati.