[Quartz.NET] 특정기간동안만 타이머 동작 시키기

Quartz.NET을 통해 특정 시간마다 대규모 HTTP 통신을 Semaphore로 제어하면서 할 생각입니다.
대규모로 Task를 등록해두고 SemaphoreSlim으로 제어하면서 하려니 몇시간이 걸릴 수 있는 작업인데, 프로덕션 DB를 대상으로 하는 작업이라, 고객의 점심시간, 저녁 및 업무 휴지시간을 이용해 돌릴 예정입니다.

그 간 Quartz.NET을 사용하면서 타이머가 돌고 있을 때 취소시키는 로직은 따로 작성하지 않았었습니다.
제가 Quartz.NET을 Generic Host와 함께 사용할 때 주로 참고한 문서는 아래와 같습니다.

아래 문서는 Visual Studio 작업자 서비스 템플릿과 함께 Quartz.NET을 사용했을 경우입니다.

이 문서들은 Generic Host와 함께하는 기초적인 사용법은 알려주지만 작업을 취소하는 기능은 보여주지 않습니다.

어떤 식으로 하면 좋을까요?

좋아요 1

음…아무래도 Quartz.NET에서 Generic Host와 함께 쓰는 방법 중에 Task를 취소하는 작업은 찾을 수가 없어서 원하는 기능을 우회하는 방법으로 해결했습니다.

Cron 식에 변경을 줬습니다.

원래는 00~09시, 12~13시, 19~20시 마다 돌려서, 00시에 시작하면 09시에 Task Cancel 하려고 했는데 이 경우 Cron 식을 0 0 0 * * ? 과 같이 주었었습니다. 이것을 0/2 * 0-9 * * ? 로 수정하여 00시~09시 사이에 2초마다 트리거가 발생하도록 하여 조금씩 Task를 조회하여 사용하는 것으로 수정했습니다.

좋아요 1

해법은 아니지만~

http://www.ahmetince.co.uk/blog/post/akkanet-scheduling-using-quartz-actor

스레드 모델이 아닌, quartz+액터모델로 이용하는 새로운 방법입니다.

좋아요 1