我在asp.net網站中使用下面的代碼。在asp.net中使用System.Timers.Timer
在應用程序初始化我調用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)
如果間隔設定定時器 開始後,計數被複位。例如,如果將間隔設置爲5 秒,然後將Enabled 屬性設置爲true,則在啓用設置的時間,計數開始於 。如果將 間隔設置爲10秒,並且計數 爲3秒,則在啓用設置爲true後,第一次引發Elapsed事件 13秒 。
是否有可能重新設置已過期函數的間隔是問題的原因?
這意味着當調用tTimer_Elapsed函數時,計數爲1小時(最小几毫秒) 和我的代碼「tTimer.Interval + = random.Next(-5,5);」正在爲Interval增加另一整小時?
如果取出隨機部分,代碼是否按預期工作? – mpeterson 2010-02-13 01:35:10
我不知道,代碼是在生產服務器上運行的,我現在不能改變它(一個不會有幾天),這就是爲什麼我問這個問題找到解釋。 – RuSh 2010-02-13 10:39:14
那麼這是否意味着它在本地測試時按預期執行? – mpeterson 2010-02-13 16:45:25