C#,有"线程安全"流这样的东西吗?

Joe*_*Gfd 7 c# multithreading stream thread-safety

我正在将进程的输出重定向到流读取器,我稍后会阅读.我的问题是我使用多个线程,应该有这个流的单独实例.当我去读这个流时,线程捏造并开始奇怪地执行.

是否存在制作线程安全流的问题?
编辑:我在streamreader上的ReadToEnd和我所做的行上放了锁:reader = proc.StandardOutput;

Mar*_*k H 17

在框架中内置了一个SyncrhonizedStream,它们只是不公开类来查看/子类等,但是你可以使用任何流来转换为SynchronizedStream

var syncStream = Stream.Synchronized(inStream);
Run Code Online (Sandbox Code Playgroud)

您应该将syncStream对象传递给需要它的每个线程,并确保您永远不会尝试在代码中的其他位置访问inStream.

SynchronizedStream仅在所有读/写操作上实现监视器,以确保线程具有对流的互斥访问.

编辑:

看来他们也在框架中实现了SynchronizedReader/SynchronizedWriter.

var reader = TextReader.Synchronized(process.StandardOutput);
Run Code Online (Sandbox Code Playgroud)