Quartz.net WithCronSchedule 'Недопустимый символ после'? ': |'C # - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь запланировать работу с помощью пакета 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 голосов
/ 23 мая 2018

Ошибка жалуется на это:

string strCronExpression = noonJob + "|" + midnightJob;

, которая выдаст строку

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

в качестве выражения cron.

Откуда вы взяли идеюВы можете связать 2 выражения cron вместе, как это?Я не могу найти (по общему признанию краткого поиска) никаких доказательств того, что это правильный синтаксис.Ошибка ясно говорит вам, что она не понимает информацию, которую вы предоставляете.

В любом случае, если вы просто хотите, чтобы он запускался два раза в день (в полночь и в полдень), я почти уверен, что вы можете дать эту инструкцию в одном выражении cron.Я думаю, что вы можете использовать выражение

0 0 0,12 * * ?

, чтобы получить этот график.

Конечно, если вы хотите определить два совершенно разных расписания, которые не описываются в одном выражении), вам, вероятно, потребуются два совершенно разных задания (даже если они выполняют одну и ту же команду).

...