Middle
Тафовут байни launch ва async/await дар Kotlin чист?
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() чакырганда |