如何判断是否手动触发了Hangfire任务

问题描述 投票:0回答:1

我有一个Hangfire服务器设置了几个重复的任务。对于本地开发,我不希望这些任务通过,但我需要能够通过Hangfire UI手动触发它们。

我能够为当前正在运行的作业提取作业数据,但是我没有看到任何内容告诉我它是否是手动触发的。

以下是我的代码的摘录,其中RunProcessReportsJob是我在Hangfire中的RecurringJob

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有大量关于作业和上下文的信息,但我再也没有看到任何内容告诉我它是手动触发的作业还是预定的作业。

c# asp.net-core hangfire
1个回答
2
投票

希望这可以帮助

    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");
    }

此消息也会显示在UI上。

使用调度程序执行:Executed using the scheduler

手动执行Manually executed

© www.soinside.com 2019 - 2024. All rights reserved.