开发者

C#, is there such a thing as a "thread-safe" stream?

I am redirecting the output of a process into a streamreader which I read later. My problem is I am using multiple threads which SHOULD have separate instances of this stream. When I go to read this stream in, the threading fudges and starts executing oddly.

Is there such a thing a开发者_运维问答s making a thread-safe stream?

EDIT: I put locks on the ReadToEnd on the streamreader, and the line where I did: reader = proc.StandardOutput;


There's a SyncrhonizedStream built into the framework, they just don't expose the class for you to look at/subclass etc, but you can turn any stream into a SynchronizedStream using

var syncStream = Stream.Synchronized(inStream);

You should pass the syncStream object around to each thread that needs it, and make sure you never try to access inStream elsewhere in code.

The SynchronizedStream just implements a monitor on all read/write operation to ensure that a thread has mutually exclusive access to the stream.

Edit:

Appears they also implements a SynchronizedReader/SynchronizedWriter in the framework too.

var reader = TextReader.Synchronized(process.StandardOutput);
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜