如何在循环内实现akka调度程序以及时输出

Jet*_*Jet 1 scala timer scheduler akka

我有一个功能,可以在循环内的定时器上做一些事情.所以我想到使用akka调度程序来实现它.这是我的示例代码(写在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)
    }
  }

}
Run Code Online (Sandbox Code Playgroud)

我原以为每隔30秒就会调用println,直到列表结束.但是它在30秒后开始并且最终一次打印所有列表项.

如何在启动后每30秒打印一次列表项?

提前致谢.

Car*_*pos 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
    })
  }
Run Code Online (Sandbox Code Playgroud)

}