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() |