Sobes.tech
Middle

Kāda ir atšķirība starp launch un async/await Kotlin?

sobes.tech AI

Atbilde no AI

launch uzsāk korutinu, kas veic darbu un neatgriež rezultātu. Tā ir paredzēta uzdevumiem, kuriem nav nepieciešama bloķējoša gaidīšana.

async uzsāk korutinu, kas veic darbu un atgriež rezultātu Deferred<T> tipā. Rezultātu var iegūt, izmantojot await(), kas suspendē pašreizējo korutinu līdz asīnhronās uzdevuma pabeigšanai. async/await tiek izmantoti, kad nepieciešams iegūt asīnhronās operācijas rezultātu.

Piemērs lietošanai:

// launch - bez atgriežamās vērtības
fun doSomethingAsync() = GlobalScope.launch {
    delay(1000)
    println("Darbs pabeigts")
}

// async/await - ar atgriežamo vērtību
suspend fun calculateSomethingAsync(): Int = GlobalScope.async {
    delay(1000)
    42
}.await()

suspend fun main() {
    doSomethingAsync()

    val result = calculateSomethingAsync()
    println("Rezultāts: $result")
}

Salīdzināšanas tabula:

Īpašība launch async/await
Atgriešanas tips Job Deferred<T>
Gaidīšana Neblokējoša (fire and forget) Prasa await() bloķējošai rezultāta gaidīšanai
Lietošana Uzdevumu uzsākšanai, kuriem nav nepieciešams rezultāts Uzdevumu uzsākšanai, kuru rezultāts ir nepieciešams turpmākai loģikai
Kļūdu apstrāde Caur CoroutineExceptionHandler Caur try-catch, izsaucot await()