我可以在这种情况下实现队列吗?
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 文档
- When to use the lock thread in C#?
- lock Statement (C# Reference)
大家好,
我要做的是,我必须持续监控 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
:
- When to use the lock thread in C#?
- lock Statement (C# Reference)