Чем launch отличается от async/await

launch отдаёт Job, а await выдаёт Deffer<Type> 

Oct. 15, 2023, Источник

Для работы с асинхронным кодом в корутинах используются два основных механизма: `launch` и `async` с `await`. Оба они позволяют выполнять задачи асинхронно, не блокируя основной поток программы, но имеют различия в использовании и поведении.

Launch

Используется для запуска корутин без блокировки текущего потока и без непосредственного получения результата выполнения. `launch` возвращает объект `Job`, который можно использовать для управления корутиной (например, отменить её выполнение). Этот метод идеально подходит для задач, результат выполнения которых нам не интересен, или когда мы хотим просто выполнить некий код асинхронно.

Пример:

```kotlin
GlobalScope.launch {
    // Выполняем асинхронную операцию
    delay(1000L) // Имитация асинхронной задачи
    println("World!")
}
println("Hello,") // Этот код выполняется сразу, не дожидаясь завершения корутины
```

Async/Await

`async` запускает корутину, которая выполняет задачу и возвращает результат в виде объекта `Deferred`, который является подтипом `Job`. Чтобы получить результат выполнения корутины, необходимо вызвать метод `await` на объекте `Deferred`. Это делает `async/await` идеальным выбором для асинхронных операций, результат которых нам важен и который мы хотим использовать далее в коде.

Пример:

```kotlin
val deferredResult = GlobalScope.async {
    // Выполняем асинхронную операцию и возвращаем результат
    delay(1000L) // Имитация асинхронной задачи
    "World!"
}
println("Hello,") // Этот код выполняется сразу, не дожидаясь завершения корутины
println(deferredResult.await()) // Ожидаем и получаем результат асинхронной операции
```

Основные отличия

  • Возвращаемое значени: `launch` возвращает `Job` и используется для выполнения кода асинхронно без возвращения результата. `async` возвращает `Deferred`, что позволяет получить результат асинхронной операции с помощью `await`.
  • Назначение: Используйте `launch` для асинхронных задач, результат которых вам не нужен. `async/await` подходит для случаев, когда вам необходим результат выполнения асинхронной операции.
  • Ожидание результата: С `launch` нет необходимости ожидать завершения задачи, в то время как `async` требует вызова `await` для получения результата.

Выбор между `launch` и `async/await` зависит от конкретной задачи: необходимости в результате работы корутины и того, как вы планируете использовать этот результат.

April 12, 2024, easyoffer