线程,队列和工作流程

时间:2010-08-27 05:28:20

标签: .net multithreading queue

(作为理由 - 我从未使用线程,所以下面的描述只是一个我想让你批评的想法)

任务概述:
- 有一些对象列表 - 我们需要检查对象是否已经以某种方式改变了 - 如果它被更改 - 应用一些逻辑(例如 - show notify)。

这就是我认为应该实施的方式:

我们创建计时器,触发每分钟,遍历对象列表并找到需要检查的对象。之后,我们将对象(或具体 - 一些任务对象,包含对象和任务描述:检查它是否已更新)添加到队列中。

Worker(线程池中的某个线程)等待,直到有一些东西被添加到Queue中,并且在它发生之后 - 它接受Task并处理它:检查Object是否被更改。如果是这样 - 它增加了另一个任务,通知一个。现在,处理通知任务的另一个工作人员将在必要时处理此任务。

那么,这是完全错误的想法吗?在这里可以改进或改变什么?

UPD :根据第一个答案:对象依赖于某些存储资源,而“更改”意味着某些远程数据已更改(或以某种特定方式更改)。因此INotifyPropertyChanged无法解决这个问题。

2 个答案:

答案 0 :(得分:3)

如果这些'对象'是.NET对象,为什么要对它们进行轮询?为什么不实现像INotifyPropertyChanged接口这样的东西,并立即通知变更?

否则,如果它们实际上是某种类型的外部对象,只能通过轮询来测试,那么一个计时器会触发一个事件,然后轮询每个对象并将通知返回给UI线程可能已经足够,或者如果您希望计时器事件快速完成(例如,它可以立即响应另一个事件),请激活Task以检查每个对象并通知UI(使用Invoke)如果它已经改变了。

不需要排队每个单独的对象并单独处理它们(是吗?),也不需要并行处理它们,因此在工作线程(或Task)中对它们进行简单的循环似乎已经足够了。

答案 1 :(得分:0)

我只是想知道你是否可以考虑一个待处理任务的队列。因此,推送到此队列的任何任务对象都在等待处理。在工作线程中,您将阻塞队列,直到项目可用。如果你想要一些并行性,你可能有多个工作线程。

您可能还有一个任务列表,显示正在进行的任务,另一个列表显示哪些已完成。

我不是C#程序员,但在Java中,我希望使用BlockingQueue接口的实现。