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

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

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

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

https://developpaper.com/using-quartz-net-in-asp-net-core-and-worker-service/

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

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

3개의 좋아요

음…아무래도 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를 조회하여 사용하는 것으로 수정했습니다.

2개의 좋아요

해법은 아니지만~

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

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

2개의 좋아요