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