【问题标题】:set the max of concurrent jobs Quartz.Net设置并发作业的最大值 Quartz.Net
【发布时间】:2016-05-20 12:15:02
【问题描述】:

在 IScheduler 对象内的服务窗口中,每次运行大量作业。但是当你开始工作时 CPU 会得到 100% 的使用率。我想限制并发作业的运行以避免过多的资源使用。目标可能是一次运行大约 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();

【问题讨论】:

    标签: c# multithreading windows-services quartz.net


    【解决方案1】:

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

    NameValueCollection properties = new NameValueCollection();
    properties["quartz.threadPool.threadCount"] = "3";
    
    ISchedulerFactory sf = new StdSchedulerFactory(properties);
    IScheduler sched = sf.GetScheduler();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-08
      • 1970-01-01
      • 2016-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多