Sobes.tech
Junior — Middle

Qual è la differenza tra l'uso di funzioni asincrone con la parola chiave async e la chiamata a launch nel contesto della programmazione asincrona?

sobes.tech AI

Risposta dell'AI

La parola chiave async viene utilizzata per dichiarare una funzione asincrona che restituisce un oggetto di tipo Deferred o Job e può essere sospesa tramite funzioni suspend interne. La chiamata a tale funzione non la avvia automaticamente, ma restituisce un risultato differito che può essere ottenuto con await.

launch è una funzione che avvia una nuova coroutine e ne inizia immediatamente l'esecuzione. Restituisce un oggetto Job, che può essere usato per gestire il ciclo di vita della coroutine (ad esempio, cancellarla).

Esempio:

suspend fun fetchData(): String {
    delay(1000)
    return "Dati"
}

fun main() = runBlocking {
    // async restituisce un Deferred, l'esecuzione inizia subito
    val deferred = async { fetchData() }
    println("Facendo altro")
    val result = deferred.await() // aspetta il risultato
    println(result)

    // launch avvia una coroutine, ma non restituisce risultato
    val job = launch {
        val data = fetchData()
        println(data)
    }
    job.join() // aspetta la fine
}

In sintesi:

  • async viene usato per avviare un'operazione asincrona con risultato.
  • launch avvia una coroutine senza valore di ritorno, per compiti in background.
  • async restituisce Deferred, launchJob.