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