2011-09-20 70 views
0

我使用下面的代碼每24小時調用一次網頁。據我所知,Timer.Elapsed事件應該在24小時內觸發一次。不幸的是,有些時候timer.Elapsed從不同的線程連續發射數次。誰能解釋爲什麼會發生這種情況?定時器ASP.NET多線程問題

void Application_Start(object sender, EventArgs e) 
{ 


    var timer = new System.Timers.Timer { Interval = 1 }; 
    timer.Elapsed += delegate 
         { 
          SiAuto.Main.LogMessage("Scheduler Timer"); 
          timer.Interval = TimeSpan.FromHours(24).TotalMilliseconds; 
          var webClient = new WebClient(); 
          webClient.DownloadDataAsync(new Uri(WebHelper.GetBaseUrl + "/scheduled-task")); 
         }; 
    timer.Start(); 


} 
+0

難道是我必須將間隔= 1的開始間隔更改爲更大的間隔= 1000? – Tomas

+0

您確定您的網站保持24小時(或更長時間)嗎? IIS關閉沒有流量的網站。 –

+0

這是發生在Web應用程序內部嗎?使用Web應用程序進行任務調度通常不是一個好主意。 Windows服務或預定的控制檯應用程序或類似的東西會更可靠。該網站的應用程序是在網絡服務器的憐憫之下,它的啓動時間,運行時間等。 – David

回答

0

也許它涉及重新啓動IIS,如果它是公共計算機。 我知道定時器在Application_Start事件中無法正常工作。

如果你有posabillity我想你最好創建一個窗口服務或 把一些變量LASTRUN DateTime和檢查,如果它基本上會觸發基於區間已經運行今天 對不起,我的英語

0

定時器你已經給出了,你的代碼解釋說你給了一個以毫秒(1秒= 1000毫秒)爲單位的間隔'1'。增加的時間間隔爲一些更並且還當一個線程是在一個函數的中間,那麼也定時器將被稱爲與任何停止,所以當主線程函數內部進入使計時器等,

timer1.Enabled = false; 

並且在所有功能之後再次啓用定時器控制。所以,它不會影響其他功能。