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:
asyncviene usato per avviare un'operazione asincrona con risultato.launchavvia una coroutine senza valore di ritorno, per compiti in background.asyncrestituisceDeferred,launch—Job.