2011-09-20 40 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; 

并且在所有功能之后再次启用定时器控制。所以,它不会影响其他功能。