Функция async

Функция async является частью Kotlin Coroutines и позволяет запускать асинхронные операции. Она возвращает объект типа Deferred<T>, где T - тип возвращаемого значения. Для получения результата используется метод await. Функция запускает новую корутину и возвращает её результат в виде отложенного значения.

Импорт

kotlinimport kotlinx.coroutines.async
import kotlinx.coroutines.runBlocking

Синтаксис

kotlinfun <T> CoroutineScope.async(
  context: CoroutineContext = EmptyCoroutineContext,
  start: CoroutineStart = CoroutineStart.DEFAULT,
  block: suspend CoroutineScope.() -> T
): Deferred<T>

Пример

Простой пример использования async для асинхронного выполнения:

kotlinimport kotlinx.coroutines.*

fun main() = runBlocking {
  val deferred = async {
    delay(1000)
    "Hello World"
  }
  println(deferred.await())
}

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

kotlinString "Hello World"

Пример

Параллельное выполнение нескольких асинхронных операций:

kotlinimport kotlinx.coroutines.*

fun main() = runBlocking {
  val deferred1 = async {
    delay(1000)
    10
  }
  val deferred2 = async {
    delay(1500)
    20
  }
  println(deferred1.await() + deferred2.await())
}

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

kotlinInt 30

Пример

Использование разных контекстов выполнения:

kotlinimport kotlinx.coroutines.*

fun main() = runBlocking {
  val deferred = async(Dispatchers.IO) {
    // Долгая операция
    delay(2000)
    42
  }
  println(deferred.await())
}

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

kotlinInt 42

Пример

Обработка исключений в асинхронных операциях:

kotlinimport kotlinx.coroutines.*

fun main() = runBlocking {
  val deferred = async {
    try {
      delay(1000)
      throw RuntimeException("Error occurred")
    } catch (e: Exception) {
      "Caught exception: ${e.message}"
    }
  }
  println(deferred.await())
}

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

kotlinString "Caught exception: Error occurred"

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

  • функцию launch,
    которая запускает корутину без возврата результата
  • функцию await,
    которая ожидает результат асинхронной операции