Sobes.tech
Middle

Mis on erinevus launch ja async/await vahel Kotlinis?

sobes.tech AI

Vastus AI-lt

launch käivitab korutina, mis teostab tööd ja ei tagasta tulemust. See on mõeldud ülesannete jaoks, mis ei vaja blokeerivat ootamist.

async käivitab korutina, mis teostab tööd ja tagastab tulemuse tüüpi Deferred<T>. Tulemuse saamiseks kasutatakse await(), mis peatab jooksva korutina kuni asünkroonse ülesande lõpetamiseni. async/await kasutatakse siis, kui on vaja saada asünkroonse operatsiooni tulemust.

Kasutusnäide:

// launch - ilma tagastusarvuta
fun doSomethingAsync() = GlobalScope.launch {
    delay(1000)
    println("Töö lõpetatud")
}

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

suspend fun main() {
    doSomethingAsync()

    val result = calculateSomethingAsync()
    println("Tulemus: $result")
}

Võrdlustabel erinevustest:

Omadus launch async/await
Tagastatüüp Job Deferred<T>
Ootamine Mitteblokeeriv (fire and forget) Nõuab await() blokeerivaks tulemuse ootamiseks
Kasutus Ülesannete käivitamiseks, mis ei vaja tulemust Ülesannete käivitamiseks, mille tulemus on vajalik edasiseks logikaks
Vea käsitlemine CoroutineExceptionHandler kaudu Try-catch kaudu, kutsudes await()