Middle
Aký je rozdiel medzi launch a async/await v Kotlin?
sobes.tech AI
Odpoveď od AI
launch spustí coroutine, ktorá vykoná prácu a nevracia výsledok. Je určená pre úlohy, ktoré nevyžadujú blokujúce čakanie na dokončenie.
async spustí coroutine, ktorá vykoná prácu a vráti výsledok typu Deferred<T>. Na získanie výsledku sa používa await(), ktoré pozastaví aktuálnu coroutine do dokončenia asynchrónnej úlohy. async/await sa používajú, keď je potrebné získať výsledok z asynchrónnej operácie.
Príklad použitia:
// launch - bez návratovej hodnoty
fun doSomethingAsync() = GlobalScope.launch {
delay(1000)
println("Práca dokončená")
}
// async/await - s návratovou hodnotou
suspend fun calculateSomethingAsync(): Int = GlobalScope.async {
delay(1000)
42
}.await()
suspend fun main() {
doSomethingAsync()
val result = calculateSomethingAsync()
println("Výsledok: $result")
}
Porovnávacia tabuľka rozdielov:
| Funkcia | launch | async/await |
|---|---|---|
| Typ návratu | Job | Deferred<T> |
| Čakanie | Neblokujúce (fire and forget) | Vyžaduje await() na blokujúce čakanie na výsledok |
| Použitie | Na spustenie úloh, ktoré nevyžadujú návrat výsledku | Na spustenie úloh, ktorých výsledok je potrebný pre ďalšiu logiku |
| Spracovanie chýb | Prostredníctvom CoroutineExceptionHandler | Prostredníctvom try-catch pri volaní await() |