Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktSpCrBl 155 of 299 menu
◀ ▶

Блокирующий запуск в Kotlin

Функция runBlocking создает корутину и связывает ее с текущим потоком так, что вызывающий код не идет дальше, пока внутренний блок не завершится. Так удобно вызывать корутинный API из обычной fun main без асинхронной оболочки.

Поведение «подождать до конца» видно, если после блока сразу печатать метку: сначала выполняется всё внутри, затем строка снаружи:

import kotlinx.coroutines.runBlocking fun main() { println("enter") runBlocking { println("inner") } println("leave") }

Порядок в консоли всегда "enter", затем "inner", затем "leave". Поток, на котором работает main, не переходит к "leave", пока корутина внутри runBlocking не закончилась.

Тот же эффект сохраняется, когда внутри несколько шагов подряд без пауз: блок считается одним целым, и наружный код ждет последний шаг:

import kotlinx.coroutines.runBlocking fun main() { runBlocking { var sum = 0 for (n in 1..5) { sum += n } println(sum) } println("finished") }

Число 15 печатается до строки "finished". Даже если тело блока занимает заметное время, вызывающая сторона остается на том же потоке и не продолжает выполнение раньше времени.

В main выведите "open", затем в runBlocking - "work", после блока - "close". Убедитесь, что "close" идет последней строкой.

Внутри runBlocking посчитайте произведение чисел от 1 до 4 и выведите результат. Сразу после блока напечатайте "ok".

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить