我正在使用Hangfire运行大约2个小时的工作。我注意到,每隔30分钟就会发生一次作业,而上一个仍在工作。因此,如果我有在特定时间启动的作业A,则30分钟后,另一个作业A将开始运行,而上一个作业仍处于处理状态。
ConfigureServices():
services.AddHangfire(config => config
.UseSimpleAssemblyNameTypeSerializer()
.UseDefaultTypeSerializer()
.UseMemoryStorage());
services.AddHangfireServer();
Configure():
app.UseHangfireDashboard();
RecurringJob.AddOrUpdate<ISender>(i => i.A(), Cron.Daily(8, 0), timeZone: TimeZoneInfo.Local);
我已经检查了运行的方法是否有错误,异常等,以确保不会因此而重试作业。经过大量测试,我认为情况并非如此。
任何帮助将不胜感激
答案 0 :(得分:0)
我不确定这是否正确,但这为我解决了问题。
这是由 ConfigureServices()中的 UseMemoryStorage()引起的。
默认情况下,传递选项(如以下示例)将限制作业在30分钟后重新出现,否则选项中将显示任何内容。
var options = new MemoryStorageOptions
{
FetchNextJobTimeout = TimeSpan.FromHours(10)
};
services.AddHangfire(config => config.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
.UseSimpleAssemblyNameTypeSerializer()
.UseDefaultTypeSerializer()
.UseMemoryStorage(options));