+str #18556 add delay combinator

This commit is contained in:
Alexander Golubev 2015-12-02 14:58:30 -05:00
parent d5cae10a67
commit 5aa83594fa
5 changed files with 10 additions and 4 deletions

View file

@ -899,7 +899,7 @@ private[stream] class Delay[T](d: FiniteDuration, strategy: DelayOverflowStrateg
}
def grabAndPull(pullCondition: Boolean): Unit = {
buffer.enqueue((System.currentTimeMillis(), grab(in)))
buffer.enqueue((System.nanoTime(), grab(in)))
if (pullCondition) pull(in)
}
@ -921,13 +921,13 @@ private[stream] class Delay[T](d: FiniteDuration, strategy: DelayOverflowStrateg
def completeIfReady(): Unit = if (willStop && buffer.isEmpty) completeStage()
def nextElementWaitTime(): Long = d.toMillis - (System.currentTimeMillis() - buffer.peek()._1)
def nextElementWaitTime(): Long = d.toMillis - (System.nanoTime() - buffer.peek()._1) * 1000 * 1000
final override protected def onTimer(key: Any): Unit = {
push(out, buffer.dequeue()._2)
if (!buffer.isEmpty) {
val waitTime = nextElementWaitTime()
if (waitTime > 0) scheduleOnce(timerName, waitTime.millis)
if (waitTime > 10) scheduleOnce(timerName, waitTime.millis)
}
completeIfReady()
}