【问题标题】:C# Job Queue Implementation with delayed event notification具有延迟事件通知的 C# 作业队列实现
【发布时间】:2011-08-23 16:41:16
【问题描述】:
我正在寻找 .Net (3.5) 中现有的作业队列实现,我想知道是否有人有好的建议。我假设没有任何作业队列能够完全按照我们的意愿行事,所以我正在寻找一个可以轻松扩展的队列。
我们的基本要求:
- 需要能够并行或串行运行作业。有些作业可能必须连续完成,有些可能可以并行运行,即使这些连续作业正在运行。
(我想从技术上讲,我们可以有 2 个作业队列,但基本实现仍然需要能够同时处理这两个。)
- 需要能够让作业触发进度事件 - 但我们希望事件能够在它们准备就绪时触发,或者在排队之后根据 UI 的轮询触发。
(我们希望在主 GUI 线程中处理所有事件,因此在 GUI 更新时,我们希望触发自上次更新以来发生的所有事件。)
谢谢,
利隆
【问题讨论】:
标签:
c#
.net
events
job-queue
【解决方案2】:
我做过一些类似的事情,它实际上只是一个消息队列,所以这里有一些关于基本实现的注释:
- 创建一个类,其中包含一些您的作业类型的队列(队列可能是一个不错的选择)、一个线程、一个 AutoResetEvent、一个 QueueJob 方法和一个事件(例如,“HandleJob”或类似的东西)
- 启动线程。线程应该等待事件,然后处理队列中的所有作业。对于每个作业,只需触发 HandleJob 事件。如果您在 UI 线程上需要它,只需让您的事件处理程序使用 Invoke 或 BeginInvoke。最后,清空队列。
- 调用 QueueJob 时,将作业添加到队列并发出事件信号。
另外,我认为应该并行运行的作业实际上并不需要是作业 - 您可以在 ThreadPool 上执行它们。
从这里,您可以制作定时执行(例如,应在 10 秒后运行的作业)、执行迭代器,并支持公开 AsyncWaitHandler 的作业(例如,允许其他作业在等待某事时执行) .