2014-02-24 5 views
1

Windows 서비스에서 System.Threading.Timer을 사용하여 일상적인 작업을 수행했습니다. 콜백 메소드에서 발생하는 처리되지 않은 예외가 서비스에 충돌을 일으 킵니까? 온라인으로 검색했지만 유용한 링크를 찾을 수 없습니다.타이머 콜백에서 처리되지 않은 예외가 발생했습니다.

이 예외가 이벤트 로그에 나타나고 서비스가 중단됩니다.

at MyNameSpace.MyClass.MyCallback(System.Object) 
at System.Threading.ExecutionContext.runTryCode(System.Object) 
at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode, CleanupCode, System.Object) 
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 
at System.Threading._TimerCallback.PerformTimerCallback(System.Object) 

이 문서에 대한 모든 MSDN 문서는 참고할 수 있습니다.

+0

이것은 스스로 알아볼 수있는 것입니다. 콜백에 예외를 던지고 무슨 일이 일어나는 지보십시오. – Marcom

+0

콜백 메소드에서 Throw (및 catch되지 않음) 된 예외는 다른 스레드에서 발생합니다. 응용 프로그램 작성 방법에 따라 서비스가 중단 될 수 있습니다. 그러나 콜백은 주 스레드에 있지 않으므로 예외가 삼켜 지거나 이벤트 뷰어에 기록 될 가능성이 큽니다. 다른 사람들이보다 자세히 대답 할 수있는 코드를 게시해야 할 수도 있습니다. 또는 http://stackoverflow.com/questions/1718598/throwing-exceptions-in-callback-method-for-timers – MattC

+0

처리되지 않은 예외가 발생할 경우 서비스를 중단하지 않는 이유는 무엇입니까? – Dennis

답변

0

예외 처리 시점에서 서비스는 다른 응용 프로그램처럼 작동합니다.
타이머의 콜백을 실행하는 작업자 스레드도 마찬가지입니다.

예외가 처리되지 않은 경우 응용 프로그램을 계속 실행할 이유가 없습니다. 서비스가 종료됩니다.

관련 문제