Middle
Jaký je rozdíl mezi launch a async/await v Kotlinu?
sobes.tech AI
Odpověď od AI
launch spustí coroutine, která vykoná práci a nevrací výsledek. Je určena pro úkoly, které nevyžadují blokující čekání na dokončení.
async spustí coroutine, která vykoná práci a vrátí výsledek typu Deferred<T>. Pro získání výsledku se používá await(), které pozastaví aktuální coroutine do dokončení asynchronní úlohy. async/await se používají, když je třeba získat výsledek asynchronní operace.
Příklad použití:
// launch - bez návratové hodnoty
fun doSomethingAsync() = GlobalScope.launch {
delay(1000)
println("Práce dokončena")
}
// 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ýsledek: $result")
}
Tabulka srovnání rozdílů:
| Funkce | launch | async/await |
|---|---|---|
| Typ návratu | Job | Deferred<T> |
| Čekání | Neblokující (fire and forget) | Vyžaduje await() pro blokující čekání na výsledek |
| Použití | Pro spuštění úkolů, které nevyžadují návrat výsledku | Pro spuštění úkolů, jejichž výsledek je nutný pro další logiku |
| Zpracování chyb | Přes CoroutineExceptionHandler | Přes try-catch při volání await() |