如何在Hangfire定期工作中获得计划的执行DateTime?

问题描述

我正在尝试将Quartz.NET支持的现有ABP项目迁移到Hangfire。

我有一个定期工作,我需要在工作中安排排班时间。请注意,我不需要实际的执行时间,而是需要预期的时间。假设我有一个定期工作,计划在每个星期一的上午10:00进行;作业运行时,我需要获取一个DateTime,指示当前星期一是上午10点。

我缺少一些PerformContext或JobData属性吗?

public class TestJob : BackgroundJob<PerformContext>,ITransientDependency
{
    private readonly IRepository<User,long> _usersRepository;

    public TestJob(IRepository<User,long> usersRepository)
    {
        _usersRepository = usersRepository;
    }

    public override void Execute(PerformContext context)
    {
        var jobData = context.Connection.GetJobData(context.BackgroundJob.Id);

        // How to get planned execution time for this job run?
    }
}

如果我的定期工作计划每小时运行一次,并且服务器停机了5个小时,则确实需要运行所有5个丢失的运行,并且我希望为每个运行都引用正确的计划日期时间。您对如何做到这一点有什么建议吗?

相同的信息可以在Quartz的IJobExecutionContext.ScheduledFireTimeUtc下找到

Hangfire Discuss Link

解决方法

我会使用延迟的工作,这可能会提供更多控制权。作业执行后,将作业本身放入具有延迟间隔的延迟队列中。

此外,Hangfire监控器API可能也是实现此目标的一种方式。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...