我每天都有“晚餐准备”活动,应该在15:00发生,但有时会延迟,发生在15:05或16.20等。
我想设置一个定期运行的“检查晚餐状态”任务,在预期的Dinner Ready事件发生前3小时开始,并按照规定的时间间隔运行,直到晚餐准备就绪。我吃晚餐的频率越来越短,越接近晚餐时间。
设置此计划的最佳方法是什么?从刚刚运行的CheckDinnerTask中设置下一个CheckDinnerTask非常简单。但这是一个好习惯吗?
以下代码基于Spring Scheduling,但我对任何调度框架都持开放态度。
scheduler.schedule(new CheckDinnerTask(), new CronTrigger("* 0 12 * * *"));
public class CheckDinnerTask() implements Runnable {
run() {
if (isDinnerReady() == false)
{
// Find out how long until scheduled dinner and
int mins = getMinutesToExpectedDinnerTime();
mins /= 2;
if (mins < 5)
mins = 5;
// Reschedule this task from here?
scheduler.scheduleWithFixedDelay(new CheckDinnerTask(), mins*60*1000);
}
else
{
eatDinner();
}
}
}