.Net (4.0) 是否有一个现有类允许一个线程写入文本而另一个线程读取?
理想情况下,我会使用 MemoryStream,例如:
MemoryStream 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();
这不起作用,因为流写入器在流中前进了位置,并且读取器不会看到任何内容,除非它使用 Seek 倒回,这会导致读取器和写入器影响位置指针的并发问题。
这可以通过管道或套接字来完成,这两者都太过分了。带锁的 RYO 代码看起来同样奇怪。
最佳答案
您可以使用 BlockingCollection<string>
。只需从一个线程将项目(文本)添加到集合中,然后使用 TryTake
或GetConsumingEnumerable
来自另一个。
关于c#-4.0 - 最简单的异步 TextWriter 到 TextReader 流/管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15798366/