使用Timer的ASP.NET多线程问题

时间:2011-09-20 13:14:54

标签: asp.net multithreading timer

我使用下面的代码每24小时调用一次网页。据我所知,Timer.Elapsed事件应该在24小时内被触发一次。不幸的是,有时timer.Elapsed从不同的线程连续多次触发。谁能解释为什么会这样?

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();


}

2 个答案:

答案 0 :(得分:0)

如果它是公共计算机,可能与重启IIS有关。 我知道计时器在Application_Start事件中不能正常工作。

如果你有实在意,我认为你最好创建一个窗口服务或 放一些变量LastRun DateTime并检查它是否已经运行 对不起我的英文

答案 1 :(得分:0)

定时器基本上会根据你给出的间隔触发,你的代码解释你给出的间隔为'1',将以毫秒为单位(1秒= 1000毫秒)。将间隔增加到更多,并且当一个线程处于一个函数的中间时,也会在没有任何停止的情况下调用定时器,所以当主线程进入函数内部时,使定时器如,

timer1.Enabled = false;

再次执行所有功能后启用定时器控件。所以,它不会影响其他功能。