hangfire中,为同一个方法设置RecurringJob,但是参数不同

Mic_Gary 2017-04-26 12:07:54

如图,我现在是将一些参数放入到shopList中,然后遍历,调用一个方法GetOrders
但结果我发现这个AddOrUpdate方法会更新之前的GetOrders,造成每次有效的都是shopList中的最后一个shop的值,所以我想问一下如何在hangfire里新增一个定时的任务。
...全文
1808 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
RecurringJob.AddOrUpdate("Your BackWork ID", () => dowork(), Cron.MinuteInterval(1), TimeZoneInfo.Utc);
  • 打赏
  • 举报
回复
ORZ。。。差点儿被博主带坑里了
博主 你这个问题为什么不用指定ID的方法来实现呢??

  • 打赏
  • 举报
回复 1
我真看不下去楼上那个装逼的大爷了。。。都不懂还到处回答人家的问题,问为什么HangFire的DashBord没有登录就可以进去?惊讶吧。。。ORZ...

还有博主这个问题,明明就是HangFire的一个特性就能解决的问题,这位大爷还嘚吧嘚嘚吧嘚一大堆,引用类型的索引在异步里面还能有问题了?。。。ORZ.....

这个问题的答案是:使用[DisableConcurrentExecution(10 * 60)]特性,具体可查看HangFire官方文档http://docs.hangfire.io/en/latest/getting-started/index.html

这里俺有一个建议:简单地将作业作为单个实例排队。然后,如果作业成功完成,则执行作业中的最后一步。作业的最后一步是在一定时间内再次排队执行作业。简单说,就是foreach里面使用BackgroundJob.Enqueue(),当然,我是看你的那个GetOrders不像是个周期方法。
  • 打赏
  • 举报
回复
你的 shop 是使用为 foreach 循环索引的,当异步执行动作时,它引用的早已经不是原来的值了。你需要使用复制的对象,例如
foreach(var shop in ....)
{
    .....
    var copy = shop;
    ...... 异步注册的方法中,参数应该使用 copy 变量,而不是 shop 变量
}

13,347

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET技术前瞻
社区管理员
  • .NET技术前瞻社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧