Hangfire 1.3.4-已删除的作业卡在队列中

Hangfire 1.3.4-已删除的作业卡在队列中,hangfire,Hangfire,我们使用BackgroundJobServerOptions.WorkerCount=1运行hangfire单线程(因为我们需要有序处理) 大多数情况下,这是没有问题的,但偶尔一个作业会因为完全预期的原因(例如,它正在运行的实际代码进入infinite循环)而被卡住,但由于我们运行的是单线程,这会阻止队列中的其他作业启动 为了尝试解决此问题,我们删除了该作业,但它仍保留在队列中,阻止任何其他作业启动: 我发现解决这个问题的唯一方法是删除并重新创建hangfire DB,这显然不是很好 为什么在

我们使用BackgroundJobServerOptions.WorkerCount=1运行hangfire单线程(因为我们需要有序处理)

大多数情况下,这是没有问题的,但偶尔一个作业会因为完全预期的原因(例如,它正在运行的实际代码进入infinite循环)而被卡住,但由于我们运行的是单线程,这会阻止队列中的其他作业启动

为了尝试解决此问题,我们删除了该作业,但它仍保留在队列中,阻止任何其他作业启动:

我发现解决这个问题的唯一方法是删除并重新创建hangfire DB,这显然不是很好

为什么在hangfire中删除正在运行的作业不会同时将其从队列中删除?这种奇怪的删除行为是一个需要在以后的版本中修复的bug,还是因为我们运行的是单线程,所以这种行为是经过设计的


如果这是出于设计,那么如何以将处理作业从队列中删除的方式取消该作业?

看来,这种行为是出于设计

如果IIS应用程序池工作程序被回收,Hangfire将立即开始处理下一个任务。但是,如果不重新启动,Hangfire将无限期地“挂起”

github对此提出了一个问题,但尚未解决:

由于无法取消或手动“失败”作业,这使得hangfire在单线程场景中的用处大大降低

更新:这已在Hangfire的某些更高版本中部分或全部解决