我使用Hangfire来运行大约需要2个小时的作业。我注意到,每30分钟就会有一次作业重新出现,而上一次作业仍在工作。所以,如果我有在特定时间开始的作业A,30分钟后,另一个作业A将开始运行,而前一个作业仍处于处理状态。
配置服务((:
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);
我已经检查了运行的方法是否有错误、异常等,只是为了确保作业不会因此而重试。经过大量测试,我认为情况并非如此。
任何形式的帮助都将不胜感激
我不确定这是否正确,但它为我解决了问题。
它是由ConfigureServices((中的UseMemoryStorage((引起的。
传递以下示例中的选项将限制作业在默认情况下30分钟后再次出现,或选项中指示的任何内容。
var options = new MemoryStorageOptions
{
FetchNextJobTimeout = TimeSpan.FromHours(10)
};
services.AddHangfire(config => config.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
.UseSimpleAssemblyNameTypeSerializer()
.UseDefaultTypeSerializer()
.UseMemoryStorage(options));