Quartz.net WithCronSchedule''后面的非法字符?':'' C#

时间:2018-05-23 12:25:31

标签: c# asp.net-mvc cron quartz.net

我正在尝试使用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);
        }
    }
}

1 个答案:

答案 0 :(得分:2)

错误是抱怨这个:

string strCronExpression = noonJob + "|" + midnightJob;

将生成字符串

0 0 0 * * ? | 0 0 12 * * ?

作为cron表达。

你在哪里得到的想法可以将2个cron表达式串起来?我无法找到(从一个公认的简短搜索)任何证据,证明它是一个有效的语法。该错误清楚地告诉您,它并不了解您提供的信息。

无论如何,如果你只想让它每天运行两次(午夜和中午),我很确定你可以在一个单独的cron表达式中给出该指令。我想你可以使用表达式

0 0 0,12 * * ?

获得该计划。

当然,如果你想要定义两个完全不同的时间表,这些时间表在一个表达式中是不可描述的),你可能需要两个完全独立的工作(即使它们执行相同的命令)。