Middle
Kokia yra skirtumas tarp launch ir async/await Kotlin'e?
sobes.tech AI
Atsakymas iš AI
launch paleidžia korutiną, kuri vykdo darbą ir negrąžina rezultato. Ji skirta užduotims, kurioms nereikia blokuojančio laukimo pabaigos.
async paleidžia korutiną, kuri vykdo darbą ir grąžina rezultatą Deferred<T> tipo. Rezultatą galima gauti naudojant await(), kuris sustabdo esamą korutiną iki asynchrininės užduoties pabaigos. async/await naudojami, kai reikia gauti asynchrininės operacijos rezultatą.
Naudojimo pavyzdys:
// launch - be grąžinamosios vertės
fun doSomethingAsync() = GlobalScope.launch {
delay(1000)
println("Darbas baigtas")
}
// async/await - su grąžinama vertė
suspend fun calculateSomethingAsync(): Int = GlobalScope.async {
delay(1000)
42
}.await()
suspend fun main() {
doSomethingAsync()
val result = calculateSomethingAsync()
println("Rezultatas: $result")
}
Palyginamasis lentelė:
| Savybė | launch | async/await |
|---|---|---|
| Grąžinimo tipas | Job | Deferred<T> |
| Laukimas | Neužblokuojantis (fire and forget) | Reikalauja await() blokuojančiam rezultatui |
| Naudojimas | Užduočių paleidimui, kurios nereikalauja rezultato | Užduočių paleidimui, kurių rezultatas reikalingas tolesnei logikai |
| Klaidos valdymas | Per CoroutineExceptionHandler | Per try-catch kviečiant await() |