设置并发作业的最大值 Quartz.Net

set the max of concurrent jobs Quartz.Net

在 IScheduler 对象内的服务 windows 中,每次有很多作业要 运行 。但是当您开始工作时 CPU 获得 100% 的使用率。我想限制并发作业 运行 避免过度使用资源。 objective 一次可以 运行 大约 3 个进程。或多或少类似于 multithread 中的标准 semaforo。我正在放一个代码示例来演示我是如何进行计划的:

_schedulerQuartz = StdSchedulerFactory.GetDefaultScheduler();

for(int i = 0; i <=10;i++){
    TriggerBuilder triggerBuilder = TriggerBuilder.Create()
                            .WithIdentity("TEST"+i.toString(), "TEST"+i.toString())
                            .StartNow();

    triggerBuilder.WithSchedule(SimpleScheduleBuilder.RepeatSecondlyForever(60));
    ITrigger trigger = triggerBuilder.Build();
    IJobDetail job = JobBuilder.Create(typeof(MYPROCESS))
                .WithIdentity("TEST2"+i.toString(), "TEST2"+i.toString())
                .UsingJobData("ClientId", 0)
                .UsingJobData("UserId", 0)
                .Build();
    _schedulerQuartz.ScheduleJob(job, trigger);
}
_schedulerQuartz.Start();

您应该能够通过将线程池大小定义为 3 来创建此限制。服务请求的线程不会超过三个,因此只能同时 运行 三个作业.请注意,这可能会导致失火,失火政策需要到位。

NameValueCollection properties = new NameValueCollection();
properties["quartz.threadPool.threadCount"] = "3";

ISchedulerFactory sf = new StdSchedulerFactory(properties);
IScheduler sched = sf.GetScheduler();