我有一个功能可以在循环内的定时器上做一些事情。所以我想到使用akka调度程序来实现它。 这是我的示例代码(写在akka演员中):
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)
}
}
}
我期待每隔30秒就会调用println,直到列表结束。但是它在30秒后开始并且最终一次打印所有列表项。
如何在启动后每30秒打印一次列表项?
提前致谢。
答案 0 :(得分:5)
似乎您循环所有Integer值并立即在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
})
}
}