RuS*_*uSh 11 .net c# asp.net timer
我在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();
}
Run Code Online (Sandbox Code Playgroud)
更新:
请不要发布"使用Windows服务"或"预定任务".我的问题是以下代码我不是在寻找更好的选择.此外,在此测试(10小时),网站流量很大,iis池没有重启!
基于以下MSDN:(http://msdn.microsoft.com/en-us/library/system.timers.timer.interval.aspx)
如果在定时器启动后设置了间隔,则重置计数.例如,如果将间隔设置为5秒,然后将Enabled属性设置为true,则计数将在Enabled设置时开始.如果在计数为3秒时将间隔重置为10秒,则在Enabled设置为true后,Elapsed事件将首次提升13秒.
是否有可能重新设置已用功能的间隔是导致问题的原因?
这意味着当调用tTimer_Elapsed函数时,计数是1小时(最小几毫秒),我的代码是"tTimer.Interval + = random.Next(-5,5);" 正在向Interval添加另一个小时?
ASP.NET应用程序将在不使用时关闭.如果有人访问您的网站,然后没有更多的点击,它可能会被关闭.你的计时器不会开火.
对于此类维护工作,您希望使用Windows计划任务或Windows服务.
| 归档时间: |
|
| 查看次数: |
16447 次 |
| 最近记录: |