Middle
Qual è la differenza tra launch e async/await in Kotlin?
sobes.tech AI
Risposta dell'AI
launch avvia una coroutine che esegue un lavoro e non restituisce risultato. È destinata all'esecuzione di task che non richiedono attesa bloccante.
async avvia una coroutine che esegue un lavoro e restituisce un risultato di tipo Deferred<T>. Per ottenere il risultato si usa await(), che sospende la coroutine corrente fino al completamento del task asincrono. async/await sono usati quando è necessario ottenere il risultato di un'operazione asincrona.
Esempio di utilizzo:
// launch - senza valore di ritorno
fun doSomethingAsync() = GlobalScope.launch {
delay(1000)
println("Lavoro completato")
}
// async/await - con valore di ritorno
suspend fun calculateSomethingAsync(): Int = GlobalScope.async {
delay(1000)
42
}.await()
suspend fun main() {
doSomethingAsync()
val result = calculateSomethingAsync()
println("Risultato: $result")
}
Tabella comparativa delle differenze:
| Caratteristica | launch | async/await |
|---|---|---|
| Tipo di ritorno | Job | Deferred<T> |
| Attesa | Non blocca (fire and forget) | Richiede await() per attesa bloccante del risultato |
| Uso | Per avviare task che non richiedono il ritorno di risultato | Per avviare task il cui risultato è necessario per la logica successiva |
| Gestione degli errori | Tramite CoroutineExceptionHandler | Tramite try-catch durante la chiamata a await() |