Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- fun main(args: Array<String>) = runBlocking<Unit> {
- val tickerChannel = ticker(
- delayMillis = 100,
- initialDelayMillis = 0
- ) // create ticker channel
- var nextElement = withTimeoutOrNull(1) { tickerChannel.receive() }
- println("Initial element is available immediately: $nextElement") // initial delay hasn't passed yet
- nextElement =
- withTimeoutOrNull(50) { tickerChannel.receive() } // all subsequent elements has 100ms delay
- println("Next element is not ready in 50 ms: $nextElement")
- nextElement = withTimeoutOrNull(60) { tickerChannel.receive() }
- println("Next element is ready in 100 ms: $nextElement")
- // Emulate large consumption delays
- println("Consumer pauses for 300ms")
- delay(300)
- // Next element is available immediately
- nextElement = withTimeoutOrNull(1) { tickerChannel.receive() }
- println("Next element is available immediately after large consumer delay: $nextElement")
- // Note that the pause between `receive` calls is taken into account and next element arrives faster
- nextElement = withTimeoutOrNull(60) { tickerChannel.receive() }
- println("Next element is ready in 50ms after consumer pause in 150ms: $nextElement")
- tickerChannel.cancel() // indicate that no more elements are needed
- }
Add Comment
Please, Sign In to add comment