大家好日子,
我要做的是,我必须连续监视表,如果Table标志为true,那么我必须根据表值创建一个Text文件,在我指定目录的本地机器中,我'使用Timer
监视表标志。
在此场景中,我可以实现queue
来写文件,还是直接可以写一个文件?
编辑/更新: 我可以像下面这样实施吗? 表格将通过另一个服务更新不同值,每30秒更新一次标志为真,如果标志为真,我的计时器将监控表格,它将读取值然后添加到队列中。最后我将表标志更新为false。
我的另一个函数将监视队列,如果队列中有任何值,它将根据队列值创建一个文本文件,如果它是空的则无关。
答案 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文档: