2

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

我们的基本要求:

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

谢谢,里

4

2 回答 2

2

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

于 2011-05-12T00:16:26.153 回答
0

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

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

此外,我认为应该并行运行的作业实际上并不需要是作业 - 您可以在 ThreadPool 上执行它们。

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

于 2011-05-11T22:57:21.320 回答