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() |