Middle
Koja je razlika između launch i async/await u Kotlinu?
sobes.tech АИ
Одговор од АИ
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() |