C# 通过参数控制Hangfire并发性

C# 通过参数控制Hangfire并发性,c#,concurrency,hangfire,C#,Concurrency,Hangfire,我有一份hangfire工作,按以下方式排队: BackgroundJob.Enqueue(() => AnalyzeRequest(request)); 请求对象包含一个用户名字符串类型字段。 我希望允许对请求进行并行分析,只要它们在userName字段中具有不同的值,但是属于同一用户的请求应该逐个进行分析。由于我希望为不同的用户请求保持并发性,所以我不想使用DisableConcurrentExecution属性。理想情况下,我想做如下事情: [禁用ConcurrentExecut

我有一份hangfire工作,按以下方式排队:

BackgroundJob.Enqueue(() => AnalyzeRequest(request)); 
请求
对象包含一个
用户名
字符串类型字段。 我希望允许对请求进行并行分析,只要它们在
userName
字段中具有不同的值,但是属于同一用户的请求应该逐个进行分析。由于我希望为不同的用户请求保持并发性,所以我不想使用
DisableConcurrentExecution
属性。理想情况下,我想做如下事情:

[禁用ConcurrentExecution(请求=>request.userName)]

有什么内在的方法来实现这一点吗


谢谢

我很确定hangfire不能按用户名或参数对它们进行分组,更不用说按顺序执行它们了(这是可能的,但看起来很糟糕-您应该在完成时在job内部创建job,但这可能会失败,并附带一堆黑客代码)

我建议您做的是在AnalyzerRequest()方法中管理它。 例如,您可以创建用户名及其各自锁对象的共享字典。并在执行时在此对象上调用Monitor.TryEnter。如果输入成功-继续,否则-优雅地放弃作业


是的,它将创建“空”作业调用,但hangfire可以很好地处理此空调用。

在AnalyzerRequest中本地处理将很容易,但如果是这样的话,它不会跨多个实例工作。是的,不同机器上的消费者应该解释“字典”作为数据库或文件中的某种同步对象。在任何情况下,都必须共享和同步此方法才能工作。