Akka初心者です。毎日決まった時刻、たとえば午前 8 時にタスクをスケジュールする必要があります。私が知っている方法は、たとえば定期的にタスクをスケジュールすることです
import akka.util.duration._
scheduler.schedule(0 seconds, 10 minutes) {
doSomething()
}
Akka で 1 日の決まった時間にタスクをスケジュールする最も簡単な方法は何ですか?
小括弧
この機能を使用するだけで、やりたいことを簡単に実行できます。おもちゃの実装は次のようになります
scheduler.schedule(0 seconds, 24 hours) {
val now = computeTimeOfDay()
val delay = desiredTime - now
scheduler.scheduleOnce(delay) {
doSomething()
}
}
難しいことではありませんが、レースコンディションを少し導入しました。実際、午前 8 時前にこれを起動するとどうなるか考えてみてください。外部閉鎖が開始されますが、私が計算するdelay
までには午前 8 時を過ぎている可能性があります。これは、すぐに実行されるはずの内部閉鎖が明日に延期され、実行が 1 日スキップされることを意味します。
この競合状態を修正する方法があります。たとえば、12 時間ごとにチェックを実行し、タスクをすぐにスケジュールする代わりに、一度に複数のタスクを受け入れないアクターに送信することができます。
しかし、おそらく、これは Akka や何らかの拡張機能に既に存在しています。