Функция await

Функция await приостанавливает выполнение корутины до получения результата от отложенной задачи (объекта типа Deferred<T>). При этом корутина не блокирует поток, а освобождает его для других задач. Когда результат становится доступным, корутина продолжает выполнение.

Импорт

kotlinimport kotlinx.coroutines.*

Синтаксис

kotlinsuspend fun <T> Deferred<T>.await(): T

Пример

Ожидание результата асинхронной задачи:

kotlinval deferred = GlobalScope.async {
  delay(1000)
  "Result"
}

val res = deferred.await()
println(res)

Результат выполнения кода:

kotlinString "Result"

Пример

Использование await в корутине:

kotlinrunBlocking {
  val deferred = async {
    delay(500)
    42
  }

  val res = deferred.await()
  println(res)
}

Результат выполнения кода:

kotlinInt 42

Пример

Обработка ошибок при использовании await:

kotlinrunBlocking {
  val deferred = async {
    delay(100)
    throw RuntimeException("Error occurred")
  }

  try {
    deferred.await()
  } catch (e: Exception) {
    println(e.message)
  }
}

Результат выполнения кода:

kotlinString "Error occurred"

Пример

Ожидание нескольких задач:

kotlinrunBlocking {
  val deferred1 = async { delay(200) 1 }
  val deferred2 = async { delay(100) 2 }

  val res1 = deferred1.await()
  val res2 = deferred2.await()
  println(res1 + res2)
}

Результат выполнения кода:

kotlinInt 3

Смотрите также

  • функцию async,
    которая создает отложенную задачу
  • функцию launch,
    которая запускает новую корутину
  • функцию withContext,
    которая выполняет блок кода в указанном контексте
  • функцию delay,
    которая приостанавливает корутину на заданное время