Я начинаю с Аккой. Мне нужно планировать задачу каждый день в определенное время дня, скажем, 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()
}
}
Это не сложно, но я ввел небольшое условие гонки. На самом деле, подумайте, что произойдет, если я запустил это перед 8AM. Внешнее закрытие начнется, но к моменту вычисления delay
мы можем после 8AM. Это означает, что внутреннее закрытие, которое должно выполнить сразу же, будет перенесено на завтра, тем самым пропустив выполнение на один день.
Есть способы исправить это состояние гонки: например, я мог выполнять чек каждые 12 часов и вместо того, чтобы планировать задачу сразу, отправляя ее актеру, который не будет принимать более одной задачи за раз.
Но, вероятно, это уже существует в Akka или в каком-то расширении.