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