带有延迟事件通知的C#作业队列实现

时间:2011-05-11 22:11:20

标签: c# .net events job-queue

我正在寻找.Net(3.5)中现有的作业队列实现,我想知道是否有人有一个好的建议。我假设没有任何工作队列能够完全按照我们的意愿行事,所以我正在寻找一个可以轻松扩展的工作队列。

我们的基本要求:

  1. 需要能够并行或串行运行作业。某些作业可能必须按顺序完成,有些作业可能可以并行运行,即使正在运行这些串行作业。 (我想技术上我们可以有2个作业队列,但基础实现仍然需要能够处理两者。)
  2. 需要能够让作业启动进度事件 - 但我们希望事件能够在它们准备就绪时启动,或者排队,然后根据来自UI的轮询启动。
    (我们希望在主GUI线程中处理所有事件,因此在GUI更新时,我们希望触发自上次更新以来发生的所有事件。)

谢谢,
Liron

2 个答案:

答案 0 :(得分:2)

quartz.net是一个非常全面的作业调度程序

答案 1 :(得分:0)

我做过类似的事情,它实际上只是一个消息队列,所以这里有一些关于基本实现的注释:

  1. 创建一个类,其中包含您的作业类型的一些队列(队列可能是一个不错的选择),一个Thread,一个AutoResetEvent,一个QueueJob方法和一个事件(比如说,“HandleJob”或类似的东西)
  2. 启动线程。线程应该等待事件,然后处理队列中的所有作业。对于每个作业,只需触发HandleJob事件即可。如果您在UI线程上需要它,只需让您的事件处理程序使用Invoke或BeginInvoke。最后,清除队列。
  3. 调用QueueJob时,将作业添加到队列并发出事件信号。
    • 注意:您需要确保队列访问已同步
  4. 另外,我认为应该并行运行的作业并不一定需要作业 - 你可以在ThreadPool上执行它们。

    从这里开始,您可以制定定时执行(比如,应该在10秒后运行的作业),执行迭代器,并支持公开AsyncWaitHandler的作业(例如,允许其他作业在等待某事时执行)