[c#] 콘솔 애플리케이션의 신뢰할 수있는 타이머

.NET 에는 세 가지 타이머 유형이 있다는 것을 알고 있습니다 ( .NET Framework 클래스 라이브러리에서 타이머 클래스 비교 참조 ). 주 스레드가 사용 중일 때 다른 유형이 드리프트 될 수 있으므로 스레드 타이머를 선택했으며 이것이 신뢰할 수 있어야합니다.

타이머의 제어에서이 타이머가 작동하는 방식은 다른 스레드에 배치되므로 바쁘지 않을 때 부모 스레드에서 완료된 작업 시작과 함께 항상 틱할 수 있습니다.

콘솔 응용 프로그램에서이 타이머의 문제는 타이머가 다른 스레드에서 작동하는 동안 주 스레드가 응용 프로그램을 닫는 데 아무 작업도하지 않는다는 것입니다.

while true루프를 추가하려고했지만 타이머가 꺼지면 메인 스레드가 너무 바쁩니다.



답변

Console.ReadLine()메인 스레드를 차단하는 것과 같은 것을 사용할 수 있으므로 다른 백그라운드 스레드 (예 : 타이머 스레드)는 계속 작동합니다. AutoResetEvent 를 사용 하여 실행을 차단 한 다음 필요한 경우 해당 AutoResetEvent 객체에서 Set () 메서드를 호출하여 주 스레드를 해제 할 수도 있습니다. 또한 Timer 객체에 대한 참조가 범위를 벗어나 가비지 수집되지 않도록하십시오.


답변

ManualResetEvent 를 사용하여 처리가 끝날 때 메인 스레드를 차단 Reset()하고 타이머 처리가 완료되면이를 호출 하는 것이 좋습니다. 지속적으로 실행해야하는 경우 콘솔 앱 대신 서비스 프로세스로 이동하는 것이 좋습니다.


답변