C# 在工作时间/工作日内每5分钟调用一个方法-Quartz.net
简言之,我希望每5分钟调用一个方法,但只在工作时间内调用。起初,我试图使用C# 在工作时间/工作日内每5分钟调用一个方法-Quartz.net,c#,scheduled-tasks,quartz-scheduler,scheduler,quartz.net,C#,Scheduled Tasks,Quartz Scheduler,Scheduler,Quartz.net,简言之,我希望每5分钟调用一个方法,但只在工作时间内调用。起初,我试图使用Thread.Sleep(),每次调用时,我都试图计算睡眠时间。不知何故,它并没有起到很好的作用 下面是计算睡眠时间的代码 void Main() { while(true) { Work() Thread.Sleep(GetSleepTime()); } } int GetSleepTime() {
Thread.Sleep()
,每次调用时,我都试图计算睡眠时间。不知何故,它并没有起到很好的作用
下面是计算睡眠时间的代码
void Main()
{
while(true)
{
Work()
Thread.Sleep(GetSleepTime());
}
}
int GetSleepTime()
{
int time = 0;
var now = DateTime.Now;
var isWorkingTime = false;
switch (now.DayOfWeek)
{
case DayOfWeek.Saturday:
case DayOfWeek.Sunday:
break;
default:
if (now.Hour >= 10 && now.Hour <= 19)
{
time = 5 * 60 * 1000;
isWorkingTime = true;
}
break;
}
if (!isWorkingTime)
{
int remainingDays = 1;
switch (now.DayOfWeek)
{
case DayOfWeek.Friday:
remainingDays = 3;
break;
case DayOfWeek.Saturday:
remainingDays = 2;
break;
}
DateTime nextWorkingday = now.AddDays(remainingDays).Date;
DateTime nextWorkingday10 = nextWorkingday.AddHours(10);
time = (int)(nextWorkingday10 - now).TotalMilliseconds;
}
return time;
}
void Main()
{
while(true)
{
工作()
Sleep(GetSleepTime());
}
}
int GetSleepTime()
{
整数时间=0;
var now=DateTime.now;
var isWorkingTime=false;
开关(现在为DayOfWeek)
{
星期六,星期六:
星期日,星期日:
打破
违约:
如果(now.Hour>=10&&now.Hour,则不需要使用sleep.Quartz.net来处理调度部分。
您需要创建一个作业及其触发器
* 0/5 9,17 * * MON-FRI
上述触发器将在上午9点到下午5点每5分钟执行一次作业
以下是另一种选择:
如果您使用的是v2+,则可以在代码中使用以下触发器定义
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.WithDailyTimeIntervalSchedule(
x => x.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(9, 0))
.EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(17, 0))
.OnMondayThroughFriday()
.WithIntervalInMinutes(5))
.Build();
问题可能重复。这里正确的cron表达式不是*0/5 10-19**MON-FRI
?我是Quartz.NET的新手,但代码似乎每天都被调用。它是否排除周六和周日?编辑:Rytmis的表达式似乎排除周六/周日,但是否可能使用第二个选项中的触发器代码?版本是的。我忽略了周末。:)我将更新答案。我尝试了以下方法:ITrigger trigger=TriggerBuilder.Create()。WithIdentity(“trigger1”,“group1”)。WithCronSchedule(*0/5 10-19**MON-FRI”)。Build();但是,System.FormatException:“未实现对同时指定星期几和月日参数的支持。”
发生了。我找到了“.OnMondayThroughFriday()”,并将其附加在EndingDailyAt和WithInterval之间。。。