我正在寻找 .Net (3.5) 中现有的作业队列实现,我想知道是否有人对一个好的有建议。我假设没有作业队列能够完全按照我们想要的方式进行,所以我正在寻找一个可以轻松扩展的队列。
我们的基本要求:
- 需要能够以并行或串行方式运行作业。有些作业可能必须串行完成,有些作业可能可以并行运行,即使在运行这些串行作业时也是如此。
(我想从技术上讲,我们可以有 2 个作业队列,但基本实现仍然需要能够处理这两个队列。 - 需要能够让作业触发进度事件 - 但我们希望事件能够在准备就绪时触发,或者排队然后根据 UI 的轮询触发。
(我们希望在主 GUI 线程中处理所有事件,因此在 GUI 更新中,我们希望触发自上次更新以来发生的所有事件。
谢谢
利龙
quartz.net 是一个非常全面的作业调度程序
我做过一些类似的事情,它实际上基本上只是一个消息队列,所以这里有一些关于基本实现的说明:
- 创建一个类,其中包含作业类型的队列(队列可能是一个不错的选择)、线程、自动重置事件、队列作业方法和事件(例如"HandleJob"或类似的东西)
- 启动线程。线程应等待事件,然后处理队列中的所有作业。对于每个作业,只需触发 HandleJob 事件。如果在 UI 线程上需要它,只需让事件处理程序使用 Invoke 或 BeginInvoke。最后,清除队列。
- 调用 QueueJob 时,将作业添加到队列并发出事件信号。
- 注意:您需要确保队列访问已同步
另外,我认为应该并行运行的作业实际上并不需要是作业 - 您可以在 ThreadPool 上执行它们。
从这里,您可以创建定时执行(例如,应在 10 秒后运行的作业)、执行迭代器以及支持公开 AsyncWaitHandler 的作业(例如,允许其他作业在等待某些内容时执行)。