2011-10-03 6 views
2

배경은 다음과 같습니다. 주어진 시간에 하루에 한 번 작업을 수행해야하는 Windows 서비스.이벤트 대 while (true) 루프

저는 현재 타이머를 생성하여 이것을 구현하고 ElapsedEventHandler를 추가했습니다. 이벤트는 매 t 분마다 실행되고 구성된 시간이 경과했는지 확인됩니다. 그렇다면 조치가 수행되고 아무런 결과가없는 경우.

동료가 sleep()을 포함하는 while (true) 루프를 가지고 있고, 물론 우리가 행동의 시간을 지났는지를 확인하기 위해 동일한 로직을 가지고있는 것이 더 쉽지 않은지 물었다.

질문 : 이벤트의 "견고성"에 대해 말할 수 있습니까? while (true) 루프가 종료되도록 쓰레드가 "죽는다"는 상황을 생각하고 있습니다. 한 시나리오에서 다른 시나리오와 비교할 때 이것이 "가능성"이 있습니까?

+0

서비스가 다른 작업을 수행합니까? 아니면 하루에 한 번만 실행됩니까? 어쨌든, 또한 내 질문을보고 자유롭게 : http://stackoverflow.com/questions/481760/ –

+0

그것은 유휴 작업을 수행하지 않을 때, 따라서 유휴 대부분의 하루. selbie가 담당 했으므로 작업 스케줄러를 살펴 보겠습니다. 고맙습니다. –

답변

8

나는 투표하지 않겠습니다.

서비스가 하루 종일 계속 유휴 상태 (및 페이징 코드가 있음)로 있으면 "실행 시간"인지 알기 때문에 Windows Task Scheduler에 더 적합한 작업입니다. 작업 스케줄러를 통해 매일 실행되도록 프로그래밍 방식으로 태스크를 설치할 수 있습니다. 그렇다면 실행 시간이 아니면 코드를 전혀 실행하지 않아도됩니다. (또는 어쨌든 백그라운드에서 서비스를 실행해야하는 경우 스케줄러의 태스크가 타이머 로직 대신 서비스를 시작하도록 신호를 보낼 수 있습니다.

+0

답변 해 주셔서 감사합니다. 작업 스케줄러를 살펴 보겠습니다. –

0

올바른 오류 처리를 사용하면 둘 다 똑같이 견고합니다.
적절한 오류 처리를 사용하지 않으면 똑같이 부서지기 쉽습니다.

while(true) 
{ 
    ... 
    Thread.Sleep(1000); 
} 

OnStop과 같은 표준 서비스 이벤트에 응답 할 때 서비스가 느려질 수 있습니다.

게다가, while 루프를 어디에 두겠습니까? 별도의 실에서? 루프를 사용하면 더 많은 수동 관리를 얻을 수 있습니다.

요약 : 타이머를 사용하십시오.