【发布时间】:2020-06-30 23:01:42
【问题描述】:
我通过ContinueJobWith<MyHandler>(parentJobId, x => x.DoWork()) 一个接一个地执行了一些工作。
但是,第二个作业没有得到处理,并且始终处于 Awaiting 状态:
为什么会发生这种情况以及在哪里检查结果?
- 我们使用 Autofac 作为 DI 容器,但我们有自己的
JobActivator实现,因为我们必须处理多租户。 - 我们使用 SQL Server 2019 进行存储。
- Hangfire 版本为 1.7.10
- 这是 MVC 5 应用程序
- 我没有在任何日志中或在调试期间看到任何错误/异常
- 通过this 之后,我已将此添加到我们的 Autofac 注册中
builder.RegisterType<BackgroundJobStateChanger>()
.As<IBackgroundJobStateChanger>()
.InstancePerLifetimeScope();
这没什么区别。
这是作业的执行方式:
var parentJobId = _backgroundJobClient.Schedule<Handler>(h => h.ConvertCertToTraining(certId, command.SetUpOneToOneRelationship), TimeSpan.FromSeconds(1));
var filesCopyJObId = _backgroundJobClient.ContinueJobWith<Handler>(parentJobId, h => h.CopyAttachedFiles());
_backgroundJobClient.ContinueJobWith<Handler>(filesCopyJObId, h => h.NotifyUser(command.CertificationToBeConvertedIds, _principal.GetEmail()));
所有参数都是int、bool 或string。如果我手动将等待的作业排入队列,它们将毫无问题地执行。
我添加了 Hangfire 日志记录,但在那里看不到任何问题:服务器启动、停止、作业更改状态,但在那里看不到任何明显的错误。
我应该考虑哪些其他事情或者我应该在哪里/如何调试这个?
【问题讨论】:
-
您可以在作业中生成一些日志,以便您分析以了解发生了什么。
-
@ChetanRanpariya 检查他们。没有例外,没有其他关于可能导致这种情况的提示。我可以看到父作业经过阶段并最终被处理,但没有别的。