我有特定问题,我希望有一个单独的工作线程,如果缓冲区不为空,在某些时段控制。如果不是,线程从缓冲区发送数据(ConcurrentQueue)......是否有任何好的解决方案,这对CPU来说并不贵?
这是我的方法,它可以工作但可能不是很好(实际上我并没有过多地讨论线程同步)。
public void start(object timeout){
//Message - my own objective implementation of some tcp message
Message m;
while (true) {
if (msgBuffer.Count != 0) {
if (msgBuffer.TryDequeue(out m)) {
client.SendData(MediatorPacket.GetPacketBytes(m));
SpinWait.SpinUntil(() => { if (msgBuffer.Count != 0) return true; else return false; });
}
}
}
}*/
答案 0 :(得分:1)
绝对。看看TPL DataFlow图书馆。特别是,BufferBlock应该符合您的需求。您可能还会发现this primer一个有趣的读物。
答案 1 :(得分:0)
听起来您正在寻找具有阻止行为的生产者 - 消费者(即,在缓冲区中存在数据之前,消费者将阻止并且不会被安排)。在这种情况下,请查看BlockingCollection。