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



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

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

因此,对于每个id,我都会将后台作业排队,并按照预期立即调用DoWork()。然而,DoWork是IO密集型的。所以如果我有100多个id,它需要大量的CPU功率和带宽

在Hangfire 中有没有限制后台工作的数量

您可以使用hangfire队列并设置该队列的工作者数量。

在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.htmlhttps://discuss.hangfire.io/t/different-queues-having-different-worker-counts/114

希望这能有所帮助。

相关内容

  • 没有找到相关文章

最新更新