【问题标题】:Can i Implement Queue in this scenerio?我可以在这种情况下实现队列吗?
【发布时间】:2015-09-24 02:29:03
【问题描述】:

祝大家今天好,

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

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

我的另一个函数会监控队列,如果队列中有任何值,它会根据队列值创建一个文本文件,如果为空则什么都不做。

【问题讨论】:

  • 您能提供更多信息吗?目前尚不清楚您要实现什么目标,或者您认为排队会有什么帮助。
  • 是的,你可以这样做,如果数据量非常大,它可能会有所帮助,但对于小数据来说似乎有点过分了。此外,如果有非常大量的数据,你必须小心更新回表只更新第一位读取的行

标签: c# windows-applications


【解决方案1】:

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

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

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


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

 private object syncObject = new Object();

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

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

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

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

【讨论】:

  • 如何使用锁定队列?你能推荐一些文章来阅读吗?
  • @OmegaMan,谢谢,我会再回答一个问题。 ;)
猜你喜欢
  • 2018-10-15
  • 1970-01-01
  • 2021-07-10
  • 2012-03-28
  • 2016-12-16
  • 1970-01-01
  • 2016-09-12
  • 2016-11-07
  • 2022-08-05
相关资源
最近更新 更多