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