Назад к вопросам
Middle
343
questionbank

В чем отличие между launch и async/await в Kotlin?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech 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")
}

Сводная таблица отличий:

Feature launch async/await
Возвращаемый тип Job Deferred<T>
Ожидание Не блокирует (fire and забыл) Требует await() для блокирующего ожидания результата
Использование Для запуска задач, не требующих возвращения результата Для запуска задач, результат которых необходим для дальнейшей логики
Обработка ошибок Через CoroutineExceptionHandler Через блок try-catch при вызове await()