Sobes.tech
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()