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