Guest User

Untitled

a guest
Jan 23rd, 2019
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.28 KB | None | 0 0
  1. fun main(args: Array<String>) = runBlocking<Unit> {
  2. val tickerChannel = ticker(
  3. delayMillis = 100,
  4. initialDelayMillis = 0
  5. ) // create ticker channel
  6. var nextElement = withTimeoutOrNull(1) { tickerChannel.receive() }
  7. println("Initial element is available immediately: $nextElement") // initial delay hasn't passed yet
  8.  
  9. nextElement =
  10. withTimeoutOrNull(50) { tickerChannel.receive() } // all subsequent elements has 100ms delay
  11. println("Next element is not ready in 50 ms: $nextElement")
  12.  
  13. nextElement = withTimeoutOrNull(60) { tickerChannel.receive() }
  14. println("Next element is ready in 100 ms: $nextElement")
  15.  
  16. // Emulate large consumption delays
  17. println("Consumer pauses for 300ms")
  18. delay(300)
  19. // Next element is available immediately
  20. nextElement = withTimeoutOrNull(1) { tickerChannel.receive() }
  21. println("Next element is available immediately after large consumer delay: $nextElement")
  22. // Note that the pause between `receive` calls is taken into account and next element arrives faster
  23. nextElement = withTimeoutOrNull(60) { tickerChannel.receive() }
  24. println("Next element is ready in 50ms after consumer pause in 150ms: $nextElement")
  25.  
  26. tickerChannel.cancel() // indicate that no more elements are needed
  27. }
Add Comment
Please, Sign In to add comment