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

Фоновый запуск в Kotlin

Блок runBlocking может не только выполнять шаги сам, но и порождать дочерние корутины. Функция launch стартует задачу в фоне: вызывающий код идет дальше, не дожидаясь конца лямбды в launch.

Пока родительский блок не закончился, дочерние корутины успевают выполниться. Два последовательных launch с разными метками показывают, что обе задачи стартуют из одного контекста:

import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking fun main() { runBlocking { launch { delay(50) println("first") } launch { delay(50) println("second") } } }

Строки "first" и "second" появляются после короткой паузы внутри каждой задачи. Функция runBlocking в конце все равно ждет завершения дочерних корутин, поэтому main не выходит раньше их печати.

Если во втором launch пауза длиннее, порядок сообщений смещается, но обе задачи запускаются в том порядке, в каком написаны вызовы:

import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking fun main() { runBlocking { launch { delay(20) println("A") } launch { delay(40) println("B") } } }

В runBlocking запустите два фоновых блока: в первом после паузы выведите "red", во втором - "blue". Паузы подберите так, чтобы "red" появилась раньше.

Сразу после старта фоновой задачи с печатью "bg" выведите "fg" из основного тела runBlocking. Убедитесь, что "fg" видна до "bg".

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