【问题标题】:How can you tell if Hangfire task was manually triggered如何判断 Hangfire 任务是否是手动触发的
【发布时间】:2019-04-16 20:34:55
【问题描述】:

我的 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】:

    希望对你有帮助

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

    使用调度程序执行:

    手动执行

    【讨论】:

    • 谢谢,我知道 UI 中的消息是关键,但我在代码中找不到。
    猜你喜欢
    • 1970-01-01
    • 2016-01-31
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多