.Net(4.0)是否有一个现有的类允许一个线程写文本而另一个线程读取?
理想情况下,我会使用像:
这样的MemoryStreamMemoryStream memStream = new MemoryStream();
TextWriter tw = new StreamWriter(memStream);
TextReader tr = new StreamReader(memStream);
//Consumer Thread
(new Thread(delegate()
{
while (true)
{
Console.WriteLine(tr.ReadLine());
}
})).Start();
// Producer thread
(new Thread(delegate()
{
while (true)
{
Thread.Sleep(1000);
tw.WriteLine(System.DateTime.Now));
}
})).Start();
这不起作用,因为streamwriter在流中推进Position并且读取器将看不到任何内容,除非它与Seek一起回退,这会导致读取器和写入器影响位置指针的并发问题。
这可以做管道或插座,这两者都是过度的。带锁的RYO代码似乎同样很奇怪。
答案 0 :(得分:1)
您可以使用BlockingCollection<string>
。只需从一个帖子中将项目(文本)添加到集合中,然后使用另一个线程中的TryTake
或GetConsumingEnumerable
。
答案 1 :(得分:1)
BlockingCollection
会起作用,但如果你想要Stream语义,那就有点奇怪了。
框架中没有任何内容。我创建了我所谓的ProducerConsumerStream
来做它。请参阅Building a new type of stream。