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

Пауза в потоке в Kotlin

Строитель flow - приостанавливаемая корутина. Между отправками можно вызвать delay: поток отдаст следующее значение не раньше, чем истечет пауза, не блокируя при этом поток насмерть.

Две метки с задержкой между ними показывают, что время течет внутри одного сбора:

import kotlinx.coroutines.delay import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.flow import kotlinx.coroutines.runBlocking fun main() { runBlocking { val ticks = flow { emit("first") delay(100) emit("second") } ticks.collect { line -> println(line) } } }

"second" следует за "first" с зазором не меньше заданных миллисекунд. Сборщик ждет вместе со строителем, пока delay не отпустит корутину.

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

import kotlinx.coroutines.delay import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.flow import kotlinx.coroutines.runBlocking fun main() { runBlocking { val pulse = flow { repeat(3) { step -> delay(50) emit(step) } } pulse.collect { n -> println(n) } } }

В консоли появляются 0, 1 и 2 с промежутками между строками. Функция delay внутри flow относится к текущему проходу сбора, а не ко всей программе.

Поток печатает через emit строки "wait" и "done", между ними 200 миллисекунд delay. Соберите поток в runBlocking.

Три раза отправьте символ "*" из цикла, перед каждой отправкой делая паузу 30 миллисекунд. Выведите символы при сборе.

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