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() |