我可以在此场景中实施队列吗?

时间:2015-09-24 02:29:04

标签: c# windows-applications

大家好日子,

我要做的是,我必须连续监视表,如果Table标志为true,那么我必须根据表值创建一个Text文件,在我指定目录的本地机器中,我'使用Timer监视表标志。 在此场景中,我可以实现queue来写文件,还是直接可以写一个文件?

编辑/更新: 我可以像下面这样实施吗? 表格将通过另一个服务更新不同值,每30秒更新一次标志为真,如果标志为真,我的计时器将监控表格,它将读取值然后添加到队列中。最后我将表标志更新为false。

我的另一个函数将监视队列,如果队列中有任何值,它将根据队列值创建一个文本文件,如果它是空的则无关。

1 个答案:

答案 0 :(得分:3)

  

我可以像下面那样实施吗?

是但请记住,使用计时器会使程序成为一个事实上的多线程操作,因此必须勤于处理队列的访问方式,以便操作不会同时访问队列并创建竞争条件。

根据您的建议,将队列作为不同操作之间的中间层没有任何问题。但是,当队列操作写入和出列时,在队列上使用lock。这样每个操作都可以在不妨碍另一个操作的情况下完成。

在容纳队列的类中创建一个锁定对象,该锁定对象将为锁提供单一的引用。

 private object syncObject = new Object();

然后,无论队列在哪里工作,都要锁定对象

 lock(syncObject)
 {
    myQueue.Enqueue(..);
 }

 ... in another method
 lock (syncObject)
 {
    myQueue.Peek(...);
    ...
    myQueue.Dequeue(...);
 }

请参阅我在SO上的答案,了解何时在代码中使用lock以获得更完整的示例,以及lock上的MSDN文档: