如何在循环内实现 akka 调度程序以实现及时输出
How to achieve an akka scheduler inside a loop for the timely ouput
我有一个功能可以在循环内通过计时器执行某些操作。于是想到了用akka scheduler来实现。
这是我的示例代码(写在 akka actor 中):
class TestActor extends Actor {
override def receive: Receive = {
case num: Int => println(num)
case Tick => loopAndPrint
}
def loopAndPrint = {
val list = List(1, 100, 5, 23)
list.map { l =>
context.system.scheduler.scheduleOnce(Duration.create(30, TimeUnit.SECONDS), self, l)
}
}
}
我原以为 println 将每 30 秒调用一次,直到列表结束。但它在 30 秒后开始并最终一次打印所有列表项。
如何实现在开始后每 30 秒打印一次列表项?
提前致谢。
您似乎循环了所有整数值并安排在 30 秒后一次打印每个值。尝试将每个循环的持续时间增加到 30。
class TestActor extends Actor {
override def receive: Receive = {
case num: Int => println(num)
case Tick => loopAndPrint
}
def loopAndPrint = {
val list = List(1, 100, 5, 23)
list.foldLeft(30)((t, l )=> {
context.system.scheduler.scheduleOnce(Duration.create(t, TimeUnit.SECONDS), self, l)
t + 30
})
}
}
我有一个功能可以在循环内通过计时器执行某些操作。于是想到了用akka scheduler来实现。 这是我的示例代码(写在 akka actor 中):
class TestActor extends Actor {
override def receive: Receive = {
case num: Int => println(num)
case Tick => loopAndPrint
}
def loopAndPrint = {
val list = List(1, 100, 5, 23)
list.map { l =>
context.system.scheduler.scheduleOnce(Duration.create(30, TimeUnit.SECONDS), self, l)
}
}
}
我原以为 println 将每 30 秒调用一次,直到列表结束。但它在 30 秒后开始并最终一次打印所有列表项。
如何实现在开始后每 30 秒打印一次列表项?
提前致谢。
您似乎循环了所有整数值并安排在 30 秒后一次打印每个值。尝试将每个循环的持续时间增加到 30。
class TestActor extends Actor {
override def receive: Receive = {
case num: Int => println(num)
case Tick => loopAndPrint
}
def loopAndPrint = {
val list = List(1, 100, 5, 23)
list.foldLeft(30)((t, l )=> {
context.system.scheduler.scheduleOnce(Duration.create(t, TimeUnit.SECONDS), self, l)
t + 30
})
}
}