Повторите задание Кварц только для определенного количества
Мне нужно запустить работу в определенное время в определенные дни недели. эти рабочие дни также являются динамическими и должны быть получены из базы данных. Также задание должно запускаться или повторяться для определенного количества. допустим, задание 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 ответа
Расписание cron не имеет концепции запуска только определенное количество раз. Может быть, вам повезет больше с другими методами планирования.
EndAt может быть более полезным и выглядит как доступный независимо от планировщика.
Вы можете создать простой триггер для каждого дня с помощью 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