Sobes.tech
Middle

Care este diferența dintre launch și async/await în Kotlin?

sobes.tech AI

Răspuns de la AI

launch pornește o coroutine care efectuează o muncă și nu returnează rezultat. Este destinat pentru sarcini care nu necesită așteptare blocantă.

async pornește o coroutine care efectuează o muncă și returnează un rezultat de tip Deferred<T>. Pentru a obține rezultatul, se folosește await(), care suspendă coroutine-ul curent până la finalizarea sarcinii asincrone. async/await sunt utilizate atunci când este necesar să se obțină rezultatul unei operațiuni asincrone.

Exemplu de utilizare:

// launch - fără valoare de întoarcere
fun doSomethingAsync() = GlobalScope.launch {
    delay(1000)
    println("Munca a fost finalizată")
}

// async/await - cu valoare de întoarcere
suspend fun calculateSomethingAsync(): Int = GlobalScope.async {
    delay(1000)
    42
}.await()

suspend fun main() {
    doSomethingAsync()

    val result = calculateSomethingAsync()
    println("Rezultat: $result")
}

Tabel comparativ al diferențelor:

Caracteristică launch async/await
Tipul de returnare Job Deferred<T>
Așteptare Nu blochează (fire and forget) Necesită await() pentru a aștepta blocant rezultatul
Utilizare Pentru a porni sarcini care nu necesită returnarea rezultatului Pentru a porni sarcini al căror rezultat este necesar pentru logica ulterioară
Tratarea erorilor Prin CoroutineExceptionHandler Prin try-catch la apelarea await()