1

我有一个特定的问题,我想要一个单独的工作线程,如果缓冲区不为空,它在某些时期控制。如果不是,线程从缓冲区(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; });
                    }
                }
            }
        }*/
4

2 回答 2

1

绝对地。看看TPL DataFlow库。特别是,BufferBlock应该适合您的需求。您可能还会发现这本入门读物很有趣。

于 2012-09-19T23:25:34.320 回答
0

听起来您正在寻找具有阻塞行为的生产者-消费者(即消费者将阻塞并且在缓冲区中有数据之前不会被调度。)。在这种情况下,看看BlockingCollection

于 2012-09-20T06:54:55.043 回答