Sobes.tech
Middle

Mi a különbség a launch és az async/await között Kotlinben?

sobes.tech MI

Válasz az MI-től

A launch elindít egy coroutine-t, amely végrehajt egy munkát, és nem ad vissza eredményt. Ez olyan feladatokra van tervezve, amelyek nem igényelnek blokkoló várakozást.

Az async elindít egy coroutine-t, amely végrehajt egy munkát, és Deferred<T> típusú eredményt ad vissza. Az eredmény eléréséhez az await()-et használjuk, amely felfüggeszti az aktuális coroutine-t a aszinkron feladat befejezéséig. Az async/await akkor hasznos, ha az aszinkron művelet eredményére van szükség.

Használati példa:

// launch - eredmény nélkül
fun doSomethingAsync() = GlobalScope.launch {
    delay(1000)
    println("Munka kész")
}

// async/await - eredménnyel
suspend fun calculateSomethingAsync(): Int = GlobalScope.async {
    delay(1000)
    42
}.await()

suspend fun main() {
    doSomethingAsync()

    val result = calculateSomethingAsync()
    println("Eredmény: $result")
}

Összehasonlító táblázat a különbségekről:

Jellemző launch async/await
Visszatérési típus Job Deferred<T>
Várakozás Nem blokkol (fire and forget) Az await() szükséges a blokkoló várakozáshoz
Használat Feladatok indítására, amelyek nem igényelnek eredményt Feladatok indítására, amelyek eredményére szükség van a további logikához
Hibakezelés CoroutineExceptionHandler segítségével try-catch segítségével az await() hívásakor