Флаг Quartz UnscheduleAllTriggers / UnscheduleAllTrigger в JobExecutionException не удаляет задание, даже если с ним не связан ни один триггер - PullRequest
0 голосов
/ 29 января 2020

Я работаю с кварцем 3,07 дюйма. NET. Моя цель состоит в том, чтобы удалить сбойные задания или создать какой-либо механизм, который будет выполнять внеплановые / удаленные задания в случае сбоя (или более определенного количества раз c). Когда я создаю задания, они не настроены на долговечность.

Я видел, что есть флаг, который вы добавляете в JobExecutionException, который останавливает работу для запуска. И это работает частично ожидаемый. Он останавливает выполнение запланированного задания, но если я запрашиваю все запланированные задания в планировщике, я получаю и задание, и триггер. Они будут удалены после того, как я убью планировщик и запустлю его снова. Вот пример кода:

        public async Task Execute(IJobExecutionContext context)
        {
          JobDataMap dataMap = context.JobDetail.JobDataMap;

          try
          {
              _logger.LogInfo($"Started Job, JobId: {jobId}, Endpoint: {endpoint}");
              await clinet.DoWork(endpoint);
          }
          catch (Exception exception)
          {
            _logger.LogException(exception);

            //Unschedule job if fails to execute.
            if (_settings.UnscheduleJobOnFailure)
            {
                throw new JobExecutionException() { UnscheduleAllTriggers = true };
            }
            throw;
          }

       }

Я не нашел документации по этому конкретному c поведению. Буду признателен за любой ответ, даже если мой способ обработки этого не является архитектурно правильным.

...