Middle
Kotlinдеги launch жана async/await ортосунда кандай айырма бар?
sobes.tech AI
AIден жооп
launch корутинаны ишке киргизет, ал ишти аткарып, натыйжаны кайтарбайт. Ал блоктогон күтүүнү талап кылбаган тапшырмалар үчүн арналган.
async корутинаны ишке киргизет, ал ишти аткарып, Deferred<T> түрүндөгү натыйжаны кайтарат. Натыйжаны алуу үчүн await() колдонулат, ал учурдагы корутинаны асинхрон иш аяктагандан кийин токтотот. async/await асинхрон операциянын натыйжасын алуу керек болгондо колдонулат.
Колдонуу мисалы:
// launch - кайтарымсыз
fun doSomethingAsync() = GlobalScope.launch {
delay(1000)
println("Иш аяктады")
}
// async/await - кайтарым менен
suspend fun calculateSomethingAsync(): Int = GlobalScope.async {
delay(1000)
42
}.await()
suspend fun main() {
doSomethingAsync()
val result = calculateSomethingAsync()
println("Натыйжа: $result")
}
Аермалардын салыштырма таблицасы:
| Өзгөчөлүк | launch | async/await |
|---|---|---|
| Врста кайтаруу | Job | Deferred<T> |
| Күтүү | Блоктогон эмес (fire and forget) | Натыйжаны күтүү үчүн await() талап кылынат |
| Колдонуу | Натыйжа кайтарбаган тапшырмаларды ишке киргизүү үчүн | Натыйжасы керек болгон тапшырмаларды ишке киргизүү үчүн |
| Катуу ката менен иштөө | CoroutineExceptionHandler аркылуу | try-catch аркылуу await() чакырганда |