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

前端 未结 3 1167
失恋的感觉
失恋的感觉 2020-12-20 14:43

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 strea

相关标签:
3条回答
  • 2020-12-20 15:21

    A 'thread-safe' stream doesn't really mean anything. If the stream is somehow shared you must define on what level synchronization/sharing can take place. This in terms of the data packets (messages or records) and their allowed/required ordering.

    0 讨论(0)
  • 2020-12-20 15:28

    Found solution here: http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/0bccd3d2-b251-41fa-bf81-776c403dcc68

    0 讨论(0)
  • 2020-12-20 15:34

    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 讨论(0)
提交回复
热议问题