问题描述
我正在尝试将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监控器API可能也是实现此目标的一种方式。