2014-11-21 2 views
-3

웹 앱을 호스팅하는 서버에서 1 분에 한 번씩 실행할 메소드를 얻으려고합니다. 스레드에서 실행되는 스레드는 앱을 시작할 때 한 번만 발생합니다.

var timer = new System.Threading.Timer(
    e => DatMethod(), 
    null, 
    TimeSpan.Zero, 
    TimeSpan.FromMinutes(1) 
); 

은 현재 난 그냥 타임 스탬프를 텍스트 파일로 DatMethod 쓰기가 : Global.asax.cs Application_Start()에서, 나는 다음과 같은 코드가 있습니다. 내가 F5을 치고 디버깅을 시작할 때 한 번 쓰는 것을 볼 수 있지만 결코 다시는 실행되지 않습니다.

코드를 삽입하는 데 적합한 곳입니까? 그렇다면, 내가 뭘 잘못하고 있니? 그렇지 않다면 어떻게 제대로 설정할 수 있습니까?

+1

이 문제가 해결 될 수 있다고 생각합니다. 올바른 방향입니다. http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/ –

+1

@NikolaMitev 그 참고를 위해 고맙다, 나는 그것을 지금 시도 할 것이다. – tnw

+0

@NikolaMitev 훌륭하게 작동했습니다. 고마워. 이 코드를 답으로 게시하고 참조 용으로 언급하면 ​​답변으로 받아 들일 수있어서 기쁩니다. – tnw

답변

2

1 분 대신 10 초 간격을 사용하면 코드가 여러 번 실행되지만 가비지 수집기가 잠시 후 타이머 인스턴스를 수집하므로 코드가 영구 실행되지 않습니다. Timer 클래스의 finalizer 메서드에서는 모든 작업을 중지합니다. 타이머 클래스에 정적 변수를 사용하면 아무런 문제가 없습니다. 그러나이 방법은 ASP.NET 스레딩 메커니즘에 몇 가지 문제가 있습니다. 대신에 http://www.quartz-scheduler.net/ 과 같은 것을 사용해야합니다. http://msdn.microsoft.com/en-us/library/dn636893(v=vs.110).aspx 다른 정보가 필요한 경우 알려주십시오.

관련 문제