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)