我不认为这是可能的akka调度。从documentation(重点煤矿):
有时候需要做的事情发生在未来出现,并 你在哪里去看看呢?看不到比ActorSystem!在那里,你 发现返回 akka.actor.Scheduler实例的调度方法,这种情况下是每ActorSystem独特,是 内部用于调度的东西在时间在特定点 发生。
但是,你总是可以用递归函数完成同样的事情。比方说,你的“实时”功能,看起来像:
def periodicFunction() : Unit = ??? //whatever you're doing to Agents
//periodicFunction is called every 10 seconds
actorSystem.scheduler().schedule(0 seconds, 10 seconds)(periodicFunction())
你的模拟代码可能仅仅是:
@scala.annotation.tailrec
def fasterThanRealTimeLoop(n : Int) =
if(n > 0) {
periodicFunction()
fasterThanRealTimeLoop(n-1)
}
然后,你可以模拟运行20次与
fasterThanRealTimeLoop(20)
此功能可以进一步被包装以封装两种可能性:
val realtimeMode : Boolean = ??? //some configuration setting
val periodicArgs : Either[FiniteDuration, Int] =
if(realtimeMode) Left(10 Seconds) else Right(20)
periodicArgs.left.foreach { period =>
actorSystem.scheduler().schedule(0 seconds, period)(periodicFunction())
}
periodicArgs.right.foreach { count =>
fasterThanRealTimeLoop(count)
}
根据配置设置,此代码现在将调用正确类型的循环(定时或尽可能快)。
它是否必须是调度程序?为什么不只是一个将消息分发给代理的递归函数? –
@ RamonJ.RomeroyVigil抱歉,我没有关注。你能提供一些你想要的更多描述吗? – davidrpugh
我会用一个例子来写答案。如果这不是你要找的东西,我总是可以删除... –