Как узнать, была ли запущена задача Hangfire вручную - PullRequest
1 голос
/ 16 апреля 2019

У меня есть сервер Hangfire с несколькими повторяющимися задачами.Для локальной разработки я не хочу, чтобы эти задачи выполнялись, но мне нужно иметь возможность вручную запускать их через пользовательский интерфейс Hangfire.

Я могу получить данные задания для выполняющегося в данный момент задания, но яне вижу внутри него ничего, что сообщало бы, был ли он запущен вручную или нет.

Вот выдержка из моего кода, где RunProcessReportsJob - это мой RecurringJob в Hangfire

public ExitCodeType RunProcessReportsJob(PerformContext context)
        {
                var jobId = context.BackgroundJob.Id;
                var connection = JobStorage.Current.GetConnection();
                var jobData = connection.GetJobData(jobId);

                _logger.LogInformation("Reoccurring job disabled.");
                return ExitCodeType.NoError;
        }

JobData имееттонна информации о работе и контексте, но опять же я не вижу в этом ничего, что сообщало бы мне, было ли это задание, запущенное вручную, или запланированное задание.

1 Ответ

2 голосов
/ 17 апреля 2019

Надеюсь, это поможет

    private bool JobWasManuallyExecuted(string jobId)
    {
        //'Triggered using recurring job manager' -- Manually triggerd via UI
        //'Triggered by recurring job scheduler' -- using scheduller
        var jobDetails = JobStorage.Current.GetMonitoringApi().JobDetails(jobId);
        if (jobDetails == null)
            return false;

        return jobDetails.History.ToList().Any(x => x.Reason == "Triggered using recurring job manager");
    }

Это сообщение также отображается в пользовательском интерфейсе.

Выполнено с использованием планировщика: Executed using the scheduler

Выполнено вручную Manually executed

...