1

我正在使用由 IIS 托管的 HangFire,其应用程序池设置为“AlwaysRunning”。我正在使用 DI 的 Autofac 扩展。目前,当使用 HangFire 运行后台作业时,它们是按顺序执行的。这两个工作性质相似,都涉及文件 I/O。第一个作业执行并开始生成必需的文件。第二个作业执行并开始执行。然后它将停止执行,直到第一个作业完成,此时第二个作业被恢复。我不确定这是否与 DI 和生命周期范围有关。我倾向于不这样认为,因为我创建了每个依赖范围的实例。我正在使用 owin 引导hangfire,并且没有传递任何 BackgroundServer 选项,也没有通过属性应用任何提示。什么会导致作业按顺序执行?我正在使用工人的默认配置。我正在向 web api 发送一个发布请求,并使用以下内容将作业添加到队列中BackgroundJob.Enqueue<ExecutionWrapperContext>(c => c.ExecuteJob(job.SearchId, $"{request.User} : {request.SearchName}"));

提前致谢

4

2 回答 2

0

我最近一直在寻找那个确切的行为,我设法通过使用这个属性来拥有它..

[DisableConcurrentExecution(<timeout>)]

可能是您在工作中或全球范围内应用了此属性?

于 2018-04-12T06:56:48.903 回答
0

这是你要找的吗?

var hangfireJobId = BackgroundJob.Enqueue<ExecutionWrapperContext>(x => x.ExecuteJob1(arguments));
hangfireJobId = BackgroundJob.ContinueWith<ExecutionWrapperContext>(hangfireJobId, x => x.ExecuteJob2(arguments));

这将基本上执行第一部分,完成后将开始第二部分

于 2018-05-04T09:53:40.277 回答