Sobes.tech
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()