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