我正在尝试使用Quartz.NET包安排一份工作,但我无法让它工作。我尝试了以下代码,但我得到了一个例外:
'?'之后的非法字符:|
我的日程安排工作应该每天运行两次。一次中午(12:00)和一次午夜(00:00)。以下是我的cron
表达式。
0 0 0 * * ?
0 0 12 * * ?
以下是代码:
public class JobScheduler
{
public async static void Start()
{
string noonJob = "0 0 0 * * ?";
string midnightJob = "0 0 12 * * ?";
string strCronExpression = noonJob + "|" + midnightJob;
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler().Result;
scheduler.Start().Wait();
IJobDetail job = JobBuilder.Create<MyJobClass>().WithIdentity("MyJobKey", "MyJobGroup").Build();
ITrigger trigger = TriggerBuilder.Create()
.WithDescription("MyJobKey")
.WithIdentity("MyJobKey", "MyJobGroup")
.WithCronSchedule(strCronExpression)
.StartAt(DateTime.UtcNow)
.WithPriority(1)
.Build();
bool isExists = scheduler.CheckExists(job.Key).Result;
if (isExists)
{
await scheduler.RescheduleJob(new TriggerKey("MyJobKey", "MyJobGroup"), trigger);
}
else
{
await scheduler.ScheduleJob(job, trigger);
}
}
}
答案 0 :(得分:2)
错误是抱怨这个:
string strCronExpression = noonJob + "|" + midnightJob;
将生成字符串
0 0 0 * * ? | 0 0 12 * * ?
作为cron表达。
你在哪里得到的想法可以将2个cron表达式串起来?我无法找到(从一个公认的简短搜索)任何证据,证明它是一个有效的语法。该错误清楚地告诉您,它并不了解您提供的信息。
无论如何,如果你只想让它每天运行两次(午夜和中午),我很确定你可以在一个单独的cron表达式中给出该指令。我想你可以使用表达式
0 0 0,12 * * ?
获得该计划。
当然,如果你想要定义两个完全不同的时间表,这些时间表在一个表达式中是不可描述的),你可能需要两个完全独立的工作(即使它们执行相同的命令)。