我是 Akka 的初学者。我需要在每天的固定时间安排一项任务,比如早上 8 点。例如,我知道如何定期安排任务
import akka.util.duration._
scheduler.schedule(0 seconds, 10 minutes) {
doSomething()
}
在 Akka 中在一天中的固定时间安排任务的最简单方法是什么?
一个小括号
使用此功能很容易做我想做的事。玩具实现看起来像
scheduler.schedule(0 seconds, 24 hours) {
val now = computeTimeOfDay()
val delay = desiredTime - now
scheduler.scheduleOnce(delay) {
doSomething()
}
}
这并不难,但我介绍了一点比赛条件。事实上,考虑一下如果我在早上 8 点之前启动它会发生什么。外部关闭将开始,但到我计算时,delay
我们可能会在上午 8 点之后。这意味着应该立即执行的内部关闭将被推迟到明天,从而跳过一天的执行。
有一些方法可以解决这种竞争条件:例如,我可以每 12 小时执行一次检查,而不是立即安排任务,而是将其发送给一次不会接受多个任务的参与者。
但很可能,这已经存在于 Akka 或某些扩展中。