我们有一个wcf服务(托管在Windows服务中)进行一些处理,可能需要几分钟才能完成(1到5分钟或更多时间) 我们需要定期(每2分钟)轮询一次数据库以获取要处理的项目,并为每个项目调用此服务。我正在考虑将Quartz.Net用于此用例。
创建一个每2分钟运行一次的石英作业,并从DB获取要处理的项目。 对于每条记录,创建一个作业并安排立即执行的作业。 我们希望限制最大并发处理数(例如,最多100个)以避免内存问题。 要做到这一点,其中一个选项是从DB中获取与可以处理的记录一样多的记录 即如果当前正在执行60个作业,我们只需要从DB中获取40个记录。 这要求我们在从DB获取项目之前知道当前正在执行的作业数量。
当第一个作业触发从DB获取记录时,是否可以知道当前正在执行多少个进程? 有一种方法 IScheduler.GetCurrentlyExecutingJobs ,我认为可用于获取活动作业的数量。 处理服务是一种单向方法,Quartz如何知道处理是否仍处于活动状态或已完成?