Hangfire按顺序运行作业

时间:2018-02-21 19:12:12

标签: asp.net-web-api owin autofac hangfire hangfire-autofac

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

将作业添加到队列中

提前致谢

2 个答案:

答案 0 :(得分:0)

我最近正在寻找这种确切的行为,我设法通过使用此属性来实现..

double sum = 0;
foreach(TabPage tbp in tabControl1.TabPages)
{
    foreach(System.Windows.Forms.Control c in tbp.Controls)
    {
            if (c.ToString() == "TextBox")
            {
                sum += Convert.ToDouble(c.Text);
            }
        }
    }

您可能在作业中或全局应用此属性吗?

答案 1 :(得分:0)

这是你在找什么?

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

这基本上会执行第一部分,当它完成时,它将启动第二部分