2015-08-08 3 views
0

Я пользуюсь библиотекой Quartz.Net. Я написал несколько триггеров:Как перезапустить мою работу после ее окончания?

var t = 
    TriggerBuilder.Create() 
    .WithIdentity("FirstTask", "TaskGroup") 
    .StartAt(DateBuilder.TodayAt(16, 17, 0)) 
    .EndAt(DateBuilder.TodayAt(17, 17, 0)) 
    .WithSimpleSchedule(x => x.RepeatForever() 
          .WithIntervalInSeconds(1)) 
    .Build(); 

Если исключить .WithIntervalInSeconds(1) у меня есть исключение, что время повтора не может быть равно нулем. Итак, как я могу возобновить работу, когда она закончится? Также я не нашел файл конфигурации quartz.net, чтобы установить для него максимальные потоки.

ответ

0

Намного проще, чем казалось на первый:

var job = JobBuilder.Create<HelloJob>().WithIdentity(new JobKey("Task_1", "TaskGroup")).Build(); 
var t = TriggerBuilder.Create() 
     .WithIdentity("Trigger_1", "TaskGroup") 
     .StartAt(DateBuilder.TodayAt(21, 15, 0)) 
     .EndAt(DateBuilder.TodayAt(21, 18, 0)) 
     .Build(); 
_scheduleService.Scheduler.ScheduleJob(job, t); 

и метод реализации в listiner:

public void JobWasExecuted(IJobExecutionContext context, JobExecutionException jobException) 
{ 
    if (DateTime.UtcNow > context.Trigger.EndTimeUtc) 
     return; 
    context.Scheduler.RescheduleJob(context.Trigger.Key, context.Trigger); 
} 
2

Чтобы установить максимальное количество потоков до 50:

var properties = new NameValueCollection { { @"quartz.threadPool.threadCount", @"50" } }; 
var factory = new StdSchedulerFactory(properties); 
var scheduler = schedulerFactory.GetScheduler(); 

И не исключают WithIntervalInSeconds, Кварц должен знать, когда бежать снова

+0

Сколько протекторов в кварце по дефолтные? Да, но мне нужно снова запустить задание после его завершения. Не по таймеру, – user3818229

+0

@ user3818229 10 (десять) - http://stackoverflow.com/questions/4108403/how-can-i-set-the-number-of-threads-in-the-quartz-net-threadpool – Backs

+0

Благодаря! Но как насчет повторения моей задачи? – user3818229

1

В моей предыдущей работе мы устанавливаем Quartz threadpool как:

quartz.threadPool.threadCount = 3 

Подробнее об этом в разделе Configuration.

@stuartd дает ответ на ваш вопрос here.
Возьмите свой ответ, а затем изменить триггер использовать StartNow метод:

var trigger = TriggerBuilder.Create() 
          .WithIdentity(triggerKey) 
          .startNow() 
          .build(); 

@SchlaWiener также обеспечить хорошее решение с использованием TopShelf.

+0

Я действительно хочу достичь работы между startTime и endTime и после начала старта снова каждый раз. Также прекратите серию, если истечет время окончания. – user3818229

+0

@ user3818229 поэтому настройте 'RepeatAfterCompletionJobListener', чтобы сделать это. Внесите даты (начало, остановка и остановка), а затем добавьте логику ... –

Смежные вопросы