Hangfire:如何有条件地排队工作

时间:2016-12-14 20:01:28

标签: hangfire

我使用Hangfire来触发数据库检索操作作为后台作业。

此操作仅发生一次,可以多种方式触发。 (例如,在UI中,当用户拖放工具时,我需要在后台触发该工作。但是如果拖放另一个工具,我不想解雇后台工作&# 39;已经从数据库中预取了)。

这就是我现在的代码:

var jobId = BackgroundJob.Enqueue<BackgroundModelHelper>( (x) => x.PreFetchBillingByTimePeriods(organizationId) );

在执行上述语句之前,我想要的是某种检查,以查找是否已经触发了后台作业;如果是的话,那么不要再开火,如果没有,那么将其排队。

例如:

bool prefetchIsFired = false;

// find out if a background job has already been fired. If yes, set prefetchIsFired to true.

if (!prefetchIsFired)
     var jobId = BackgroundJob.Enqueue<BackgroundModelHelper>( (x) => x.PreFetchBillingByTimePeriods(organizationId, null) );

1 个答案:

答案 0 :(得分:0)

您可以在工作方法上使用过滤器(DisableMultipleQueuedItemsFilter),如下所示:https://discuss.hangfire.io/t/how-do-i-prevent-creation-of-duplicate-jobs/1222/4