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

时间:2019-04-16 20:34:55

标签: c# asp.net-core hangfire

我有一个设置有多个重复任务的Hangfire服务器。对于本地开发,我不希望完成这些任务,但是我需要能够通过Hangfire用户界面手动触发它们。

我能够提取当前正在运行的作业的“作业数据”,但是看不到任何内容可以告诉我是否是手动触发的。

这是我的代码节选,其中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具有大量有关该作业和上下文的信息,但是我再也看不到其中有任何信息可以告诉我它是手动触发的作业还是预定的作业。

1 个答案:

答案 0 :(得分: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");
    }

此消息也会显示在用户界面上。

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

手动执行 Manually executed