Назад к вопросам
Middle
345
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() |