Функция runBlocking
Функция runBlocking создает новый корутин-контекст и блокирует текущий поток до тех пор,
пока не завершатся все корутины внутри этого блока. Является мостом между обычным и асинхронным кодом.
Принимает необязательный параметр контекста и блок кода с получателем типа CoroutineScope.
Импорт
import kotlinx.coroutines.runBlocking
Синтаксис
fun <T> runBlocking(
context: CoroutineContext = EmptyCoroutineContext,
block: suspend CoroutineScope.() -> T
): T
Пример
Базовое использование runBlocking для выполнения асинхронного кода:
import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
fun main() {
println("Start")
runBlocking {
delay(1000)
println("Inside runBlocking")
}
println("End")
}
Результат выполнения кода:
Start
Inside runBlocking
End
Пример
Использование runBlocking с возвратом значения:
import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
fun main() {
val result = runBlocking {
delay(500)
"Hello from coroutine"
}
println("Result: $result")
}
Результат выполнения кода:
Result: Hello from coroutine
Пример
Запуск нескольких корутин внутри runBlocking:
import 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")
}
Результат выполнения кода:
Main coroutine
Coroutine 2
Coroutine 1
Пример
Обработка исключений в runBlocking:
import kotlinx.coroutines.runBlocking
fun main() {
try {
runBlocking {
throw RuntimeException("Test exception")
}
} catch (e: Exception) {
println("Caught exception: ${e.message}")
}
}
Результат выполнения кода:
Caught exception: Test exception
Смотрите также
-
функцию
coroutineScope,
которая создает неблокирующий контекст для корутин -
функцию
withContext,
которая переключает контекст выполнения корутины -
функцию
launch,
которая запускает новую корутину -
функцию
async,
которая запускает корутину с возвратом результата