【发布时间】:2010-10-28 07:46:41
【问题描述】:
我想在 c# 中编写一个批处理作业,它以随机(ish)间隔运行任务,例如每小时 +/- 20 分钟,如果不需要更新,则在最后一次运行之前等待 x2。
最好的方法是什么?
【问题讨论】:
标签: c# .net batch-file scripting random
我想在 c# 中编写一个批处理作业,它以随机(ish)间隔运行任务,例如每小时 +/- 20 分钟,如果不需要更新,则在最后一次运行之前等待 x2。
最好的方法是什么?
【问题讨论】:
标签: c# .net batch-file scripting random
如何将上次“不必要”运行的时间戳记录到数据库/某个永久位置?然后,你的第一行可以说:
LastRunWithoutUpdating = GetLastRunWithoutUpdating() // load from file, or db...
if (LastRunWithoutUpdating - CurrentTime < DelayInterval) {
SkipThisRun(); // sys.exit() or something
}
【讨论】:
其他人的答案都很好,但我在这里唯一可以贡献的是你不应该做的事情。不要不要使应用程序成为 Windows 服务。我已经多次看到它作为类似问题的答案。这不是 Windows 服务的用途。
在我的书中,windows服务是挂在后台以方便其他程序的应用程序/程序,或者不需要用户输入来操作。它不能用作按时间间隔启动程序的方法。
【讨论】:
可以创建一个每隔一段时间就会弹出的计时器并运行一个方法。
示例:
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);
}
}
【讨论】:
考虑创建一个简单的应用程序,并使用 Windows 任务计划程序启动它。调度程序让您可以对运行的时间和内容进行大量控制,其中包括时间随机化。
编辑:错过了“2x”部分。过去,我构建了 Windows 服务来执行此操作:
sleep(1x +/- random(20 minutes))
if nothing to do, sleep(2x +/- random(20 minutes))
【讨论】: