我不認爲這是可能的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
我會用一個例子來寫答案。如果這不是你要找的東西,我總是可以刪除... –