【发布时间】:2018-05-12 21:47:00
【问题描述】:
现在或自从我学习编程以来,我正在使用以下代码来执行此操作:
ConcurrentQueue<MyPkg> messageQueue= new ConcurrentQueue<MyPkg>;
private void Post()
{
while (true)
{
if (messageQueue.IsEmpty)
{
//Post to server
}
Thread.Sleep(1);
}
}
这种睡眠时的“查询模式”看起来很愚蠢....大多数时候cpu只是保持上下文切换是徒劳的。但是很多人都在这样做。有没有更好的办法? “中断”或“触发”之类的方式?
【问题讨论】:
-
解决方案(可能太重)可能是
BlockingCollection。 -
除此之外,除非它是为线程安全访问而设计的类型,否则这很可能已经被破坏了。
-
然后是blocking queue。
-
代码中的任何内容都不会对 cpu 需要多少上下文切换产生太大影响——而且这不是没有原因的,总是有其他进程需要 CPU 时间。话虽如此,通常*有更好的方法让一个线程等待另一个线程(或进程)发出信号,例如,当有数据要处理时。您是否可以控制数据放入队列时会发生什么?
-
只需按照上面的建议将您的并发队列包装到 BlockingCollection 中,为什么要重新发明轮子?
标签: c# while-loop queue infinite-loop