可以挂起并行运行的后台作业的油门数量

时间:2018-07-23 23:32:02

标签: c# hangfire hangfire-sql

我有IO密集型方法,我使用hangfire作为后台作业运行。

public IHttpActionResult Request(int[] ids)
{
    foreach(var id in ids)
    {
       BackgroundJob.Enqueue<IMyService>(x => x.DoWork(id));
    }
}

因此,对于每个id,我都会加入一个后台作业,然后进行hangfire,然后按预期立即调用DoWork()。但是DoWork是IO密集型的。因此,如果我有100多个ID,则需要大量的CPU能力和带宽

反正有限制在Hangfire中进行后台作业的数量

1 个答案:

答案 0 :(得分:1)

您可以使用hangfire queues并设置该队列的工作程序数。

在hangfire启动配置中,设置以下队列:

var options = new BackgroundJobServerOptions
{
    Queues = new[] { "default" }, // You can have multiple queues and multiple worker counts.. check hangfire documentation
    WorkerCount = 5 // this is up to you
};

app.UseHangfireServer(options);

请参见下面的代码示例:

public IHttpActionResult Request(int[] ids)
{
    foreach(var id in ids)
    {
       BackgroundJob.Enqueue<IMyService>(x => x.DoWork(id));
    }
}


[Queue("default")]// add this attribute on your function
public void DoWork() { 
    //Magical IO code here
}

如果需要任何其他信息,建议您查看以下hangfire文档: http://docs.hangfire.io/en/latest/background-processing/configuring-degree-of-parallelism.html https://discuss.hangfire.io/t/different-queues-having-different-worker-counts/114

希望这会有所帮助。