如何以随机间隔运行脚本

时间:2009-05-22 19:15:05

标签: c# .net batch-file scripting random

我想在c#中编写一个以随机(ish)间隔运行任务的批处理作业,例如每小时+/- 20分钟,如果不需要更新,则在最后一次再次运行之前等待x2。

这样做的最佳方法是什么?

4 个答案:

答案 0 :(得分:1)

其他人的答案都很不错,但我能在这里做出的贡献是你不应该做的事情。 使应用程序成为Windows服务。我已经多次看到它作为类似问题的答案。这不是Windows服务的用途。

在我的书中,Windows服务是在后台挂起的应用程序/程序,以方便其他程序,或者不需要用户输入操作。它不能用作按时间间隔启动程序的方法。

答案 1 :(得分:0)

考虑创建一个简单的应用程序,并使用Windows任务计划程序将其解决。调度程序可以让您对运行的时间和运行情况进行大量控制,并且包括时间随机化。

编辑:错过了'2x'部分。在过去,我已经构建了Windows服务来执行此操作:

sleep(1x +/- random(20 minutes))
if nothing to do, sleep(2x +/- random(20 minutes))

答案 2 :(得分:0)

可以创建一个经常弹出并运行方法的计时器。

示例:

Timer ProcessTimer = new Timer(new TimerCallback(ProcessRandomTask), null, 0,Timeout.Infinite);


private void ProcessRandomTask(object data)
{
 //Do work

  lock(ProcessTime)
  {
       //change timer
       ProcessTimer.Change(GetNewTime(), Timeout.Infinite);
  }
}

答案 3 :(得分:0)

如何将上次“不必要”运行的时间戳记录到数据库/某个永久位置?然后,你的第一行可以说:

LastRunWithoutUpdating = GetLastRunWithoutUpdating() // load from file, or db...
if (LastRunWithoutUpdating - CurrentTime < DelayInterval) {
    SkipThisRun(); // sys.exit() or something
}