我可以在这个场景中实现队列吗?

本文关键字:实现 队列 我可以 | 更新日期: 2023-09-27 18:14:10

大家好,

我要做的是,我必须连续监视表,如果表标志为真,那么我必须根据表值创建一个文本文件,在我的本地机器中指定的目录,我使用Timer来监视表标志。该场景下是通过queue写文件还是直接写文件?

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

我的另一个函数将监视队列,如果队列中有值,它将根据队列值创建一个文本文件,如果它是空的什么也不做

我可以在这个场景中实现队列吗?

我可以像下面这样实现吗?

是的,但是请记住,定时器的使用使程序实际上成为多线程操作,因此必须注意如何访问队列,以便操作不会同时访问队列并产生竞争条件。

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


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

 private object syncObject = new Object();

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

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

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

    在c#中什么时候使用锁线程?
  • 锁语句(c# Reference)