Hangfire经常性作业每30分钟运行一次,但仍未完成

时间:2020-07-17 11:49:39

标签: asp.net-core hangfire

我正在使用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);

我已经检查了运行的方法是否有错误,异常等,以确保不会因此而重试作业。经过大量测试,我认为情况并非如此。

任何帮助将不胜感激

1 个答案:

答案 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));