我可以在这种情况下实现队列吗?

Can i Implement Queue in this scenerio?

大家好,

我要做的是,我必须持续监控 Table,如果 Table 标志为真,那么我必须根据 table 创建一个文本文件值,在我指定目录的本地计算机中,我正在使用 Timer 来监视 Table 标志。 在这种情况下,我可以实现 queue 来写入文件还是可以直接写入文件?

Edit/Update: 我可以像下面那样实现吗? Table 将通过另一个服务每 30 秒由不同的值更新为 true,这里我的计时器将监视 Table 如果 Flag 为真,它将读取值然后添加到队列中.最后,我会将 table 标志更新为 false。

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

can i Implement like below?

是的,但请记住,计时器的使用使程序成为事实上的多线程操作,因此必须仔细研究队列的访问方式,以免操作同时访问队列并产生竞争条件.

按照您的建议,使用队列作为不同操作之间的中间体并没有错。但是在队列操作发生写入和出队时,在队列上使用 lock 。这样每个操作都可以在不影响另一个的情况下完成。


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

 private object syncObject = new Object();

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

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

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

请参阅我关于何时在代码中使用 lock 的回答以获得更完整的示例,以及有关 lock:

的 MSDN 文档