C# Azure-基于时间的任务排队

C# Azure-基于时间的任务排队,c#,azure,queue,scheduled-tasks,azure-worker-roles,C#,Azure,Queue,Scheduled Tasks,Azure Worker Roles,在Windows Azure上运行的我的应用程序处理来自用户(放入Azure队列)的传入请求,并将它们分配给现实世界中的人 人们有一定的时间来处理请求。如果分配给我的人中没有一个人处理这个请求,我需要换一组新的人。基本上,我想把这些任务排成队列,在某个时间处理,然后再处理它们。如果其中一个用户处理了该任务,我需要将其出列,以便工作人员不再处理该任务。您需要使用计划任务。有两个很好的库可供您使用: 和 使用scheduledler,这样的任务变得很容易。 您只需创建一个在处理时间到期时运行的作业

在Windows Azure上运行的我的应用程序处理来自用户(放入Azure队列)的传入请求,并将它们分配给现实世界中的人


人们有一定的时间来处理请求。如果分配给我的人中没有一个人处理这个请求,我需要换一组新的人。基本上,我想把这些任务排成队列,在某个时间处理,然后再处理它们。如果其中一个用户处理了该任务,我需要将其出列,以便工作人员不再处理该任务。

您需要使用计划任务。有两个很好的库可供您使用: 和

使用scheduledler,这样的任务变得很容易。 您只需创建一个在处理时间到期时运行的作业。在那里,您将检查是否有任何未处理的请求,如果有剩余的请求,您将通知下一组人员,并在处理时间到期后设置另一个计划启动

如果你需要进一步的细节,请告诉我


我已经在azure webrole的生产应用程序中成功地使用了Quartz.net。

这个问题很有趣。我也在做类似的项目。仍在寻找答案。这个比例如何?如果您同时运行10个web角色怎么办?这不会造成大量的重复工作吗?马克,这是一个很好的评论。调度程序确实可以在每个实例中运行。触发计划作业时,您只需在azure队列上推送一条消息,并将其留给工作人员角色。你可以偷看,看看是否已经存在相同的消息。但azure队列中仍有可能存在多条相同的消息。这就是为什么您应该在设计中始终争取幂等性->在这种情况下,这意味着您的系统不会多次处理消息。有时幂等性是不可能的。在我的情况下,我需要比这更具弹性的东西。@Mark Seemann:如果我对您的问题的理解是正确的,您应该在一个(或多个)workerrole中运行计划任务,该workerrole将由队列消息提供。@santiagoIT:谈到幂等性的重要性,我完全同意您的看法。尽管如此,在我看来,开始10个幂等(但相同)的工作似乎是浪费。在Azure上,它的价格甚至可能是你仅仅开始一项工作的10倍。