你怎么知道 Hangfire 任务是否被手动触发

How can you tell if Hangfire task was manually triggered

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

希望对您有所帮助

    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 上。

使用调度程序执行:

手动执行