关于C#:设置并发作业的最大数量Quartz.Net

set the max of concurrent jobs Quartz.Net

在一个IScheduler对象内的服务窗口中,每次都有很多要运行的作业。但是,当您开始CPU工作时,将获得100%的使用率。我想限制并发作业的运行,以避免过多的资源使用。该目标一次可以运行大约3个流程。或多或少像多线程中的标准semaforo。我正在提供一个代码示例来演示我如何制定时间表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
_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来创建此限制。不会有超过三个线程来处理请求,因此只能同时运行三个作业。请注意,这可能会导致失火,并且必须制定失火政策。

1
2
3
4
5
NameValueCollection properties = new NameValueCollection();
properties["quartz.threadPool.threadCount"] ="3";

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