1

我有 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 中的后台作业数量

4

1 回答 1

1

您可以使用 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.html https://discuss.hangfire .io/t/不同的队列有不同的工人计数/114

希望这可以帮助。

于 2018-07-24T04:48:24.680 回答