我在asp.net网站上使用以下代码。
在应用程序init上,我调用一次InitializeTimer()。
代码的目标是每小时运行一次DoWork()(每小时1次)。
我还希望代码在每个循环的不同时间执行,所以我添加了随机部分。
我得到的结果是werid,我找不到解释为什么会发生。
代码在2小时后执行该功能,然后在2小时后再执行该功能 3小时 ,然后2小时后,再过2小时。****
任何人都能解释一下原因吗?
using System.Timers;
....
private static random = new Random();
....
public static void InitializeTimer()
{
tTimer = new Timer();
tTimer.AutoReset = true;
tTimer.Interval = TimeSpan.FromHours(1.0).TotalMilliseconds;
tTimer.Elapsed += new ElapsedEventHandler(ClassName1.tMailer_Elapsed);
tTimer.Start();
}
private static void tTimer_Elapsed(object sender, ElapsedEventArgs e)
{
tTimer.Interval += random.Next(-5, 5);
DoWork();
}
更新:
请不要发布“使用Windows服务”或“预定任务”。 我的问题是以下代码 我不是在寻找更好的选择。 此外,在此测试(10小时),网站流量很大,iis池没有重启!
基于以下MSDN :(http://msdn.microsoft.com/en-us/library/system.timers.timer.interval.aspx)
如果在Timer之后设置了间隔 已经开始,计数被重置。对于 例如,如果将间隔设置为5 秒,然后设置启用 属性为true,计数开始于 已设置启用时间。如果你重置 计数时的间隔为10秒 是3秒,Elapsed事件是 第一次提升13秒 在Enabled之后设置为true。
是否有可能重新设置已用功能的间隔是导致问题的原因?
这意味着当调用tTimer_Elapsed函数时,计数是1小时(最小几毫秒) 和我的代码“tTimer.Interval + = random.Next(-5,5);”正在向Interval添加另一个小时?