Функция runBlocking

Функция runBlocking создает новый корутин-контекст и блокирует текущий поток до тех пор, пока не завершатся все корутины внутри этого блока. Является мостом между обычным и асинхронным кодом. Принимает необязательный параметр контекста и блок кода с получателем типа CoroutineScope.

Импорт

kotlinimport kotlinx.coroutines.runBlocking

Синтаксис

kotlinfun <T> runBlocking(
  context: CoroutineContext = EmptyCoroutineContext,
  block: suspend CoroutineScope.() -> T
): T

Пример

Базовое использование runBlocking для выполнения асинхронного кода:

kotlinimport kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking

fun main() {
  println("Start")
  runBlocking {
    delay(1000)
    println("Inside runBlocking")
  }
  println("End")
}

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

kotlinStart
Inside runBlocking
End

Пример

Использование runBlocking с возвратом значения:

kotlinimport kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking

fun main() {
  val result = runBlocking {
    delay(500)
    "Hello from coroutine"
  }
  println("Result: $result")
}

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

kotlinResult: Hello from coroutine

Пример

Запуск нескольких корутин внутри runBlocking:

kotlinimport kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking

fun main() = runBlocking {
  launch {
    delay(1000)
    println("Coroutine 1")
  }
  launch {
    delay(500)
    println("Coroutine 2")
  }
  println("Main coroutine")
}

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

kotlinMain coroutine
Coroutine 2
Coroutine 1

Пример

Обработка исключений в runBlocking:

kotlinimport kotlinx.coroutines.runBlocking

fun main() {
  try {
    runBlocking {
      throw RuntimeException("Test exception")
    }
  } catch (e: Exception) {
    println("Caught exception: ${e.message}")
  }
}

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

kotlinCaught exception: Test exception

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

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