Повторите задание Кварц только для определенного количества - PullRequest
0 голосов
/ 28 января 2019

Мне нужно запустить работу в определенное время в определенные дни недели.эти рабочие дни также являются динамическими и должны быть получены из базы данных. Также задание должно запускаться или повторяться для определенного количества.скажем, задание j должно срабатывать на каждый понедельник, ср, пт для счетчика повторений 15, т. е. для 3 * 5 = 15, поэтому оно должно срабатывать в течение следующих 3 недель.

Я попытался использовать выражение кроны, как показано ниже, но могне могу найти способ остановить запуск задания после определенного подсчета.

   StringBuilder cronString = new StringBuilder("0 0 12 ? * ");
            if (plandata.Sunday == true)
                cronString.Append("SUN,");
            if (plandata.Monday == true)
                cronString.Append("MON,");
            if (plandata.Tuesday == true)
                cronString.Append("TUE,");
            if (plandata.Wednesday == true)
                cronString.Append("WED,");
            if (plandata.Thursday == true)
                cronString.Append("THU");
            if (plandata.Friday == true)
                cronString.Append("FRI,");
            if (plandata.Saturday == true)
                cronString.Append("SAT,");
            cronString.Append(" *");

            IJobDetail job = JobBuilder.Create<Demo>()
                .Build();
            ITrigger trigger = TriggerBuilder.Create()
                   //.StartAt((DateTime)plandata.StartDate)
                   .StartNow()
                   .WithPriority(1)
                   .WithCronSchedule(cronString.ToString())
                   .Build();

Пожалуйста, предложите мне что-нибудь, чтобы я смог достичь того, что мне нужно.

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Вы можете создать простой триггер для каждого дня, используя ISimpleTrigger.Вам не нужно использовать какой-либо триггер хрон для этой работы.Прежде всего, вы должны получить соответствующую дату.

   DateTime today = DateTime.Today;
   // The (... + 7) % 7 ensures we end up with a value in the range [0, 6]
   int daysUntilMonday = ((int)DayOfWeek.Monday - (int)today.DayOfWeek + 7) % 7;
   DateTime nextMonday = today.AddDays(daysUntilMonday);

или

    DateTime today = DateTime.Today;
   // The (... + 7) % 7 ensures we end up with a value in the range [0, 6]
   int daysUntilWednesday = ((int)DayOfWeek.Wednesday - (int)today.DayOfWeek + 7) % 7;
   DateTime nextWednesday = today.AddDays(daysUntilWednesday);

Затем вы можете создать триггер, подобный этому.

   ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create()
      .WithIdentity("DEFAULT")
      .StartAt(nextMonday)   // or .StartAt(nextWednesday)
      .WithSimpleSchedule(x => x
           .WithIntervalInHours(168) // 1 week = 168h
           .WithRepeatCount(3))   // Repeat on 3 weeks
           .Build();

Это простоТриггер будет удален автоматически после завершения его повторения.

Для получения более подробной информации - https://www.quartz -scheduler.net / Documentation / quartz-2.x / tutorial / simpletriggers.html

0 голосов
/ 28 января 2019

В расписании cron нет концепции запуска только определенное количество раз.Возможно, вам повезет больше с другими методами планирования .

EndAt может быть более полезным и выглядит так, как будто оно доступно независимо от планировщика.

...