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 |