2011-09-20 4 views
0

아래 코드를 사용하여 24 시간마다 웹 페이지를 호출합니다. Timer.Inlapsed 이벤트가 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

웹 응용 프로그램 내부에서 이러한 현상이 발생합니까? 일반적으로 작업 스케줄링을 위해 웹 응용 프로그램을 사용하는 것은 좋지 않습니다. Windows 서비스 나 예정된 콘솔 앱 또는 그와 같은 것이 훨씬 더 신뢰할 수 있습니다. 웹 응용 프로그램은 웹 서버가 시작될 때, 실행되는 시간, 실행되는 시간 등에 관한 정보를 제공합니다. – David

답변

0

공용 컴퓨터 인 경우 IIS를 다시 시작해야 할 수도 있습니다. Application_Start 이벤트에서 타이머가 제대로 작동하지 않는다는 것을 알고 있습니다. 당신이 posabillity이있는 경우 이미 간격에 기본적으로 기반 화재 것입니다 내 영어

0

타이머 오늘 죄송 실행 않다면

난 당신이 더 나은 몇 가지 변수 LASTRUN 날짜 시간을 넣어하고 확인하는 윈도우 서비스 나 를 만들 생각 코드에서 제공하는 간격을 '1'로 지정하면 밀리 초 (1 초 = 1000 밀리 초)로 표시됩니다. 어떤 정지 밖으로 스레드가 하나 개의 함수의 중간에 또한 때 좀 더하고, 다음 또한 타이머가 호출됩니다에 간격을 증가, 그래서 메인 스레드가 함수 내부에 들어갈 때처럼 타이머를 만들

timer1.Enabled = false; 

및 모든 기능을 다시 수행 한 후 타이머 제어를 다시 활성화하십시오. 따라서 다른 기능이 영향을 미치지 않습니다.