В инфраструктуру встроен SyncrhonizedStream, они просто не предоставляют класс для просмотра / подкласса и т. Д., Но вы можете превратить любой поток в SynchronizedStream, используя
var syncStream = Stream.Synchronized(inStream);
Вы должны передатьобъект syncStream для каждого потока, который в этом нуждается, и убедитесь, что вы никогда не пытаетесь получить доступ к inStream в другом месте кода.
SynchronizedStream просто реализует монитор для всех операций чтения / записи, чтобы гарантировать, что поток имеет взаимоисключающиедоступ к потоку.
Редактировать:
Похоже, они также реализуют SynchronizedReader / SynchronizedWriter в рамках.
var reader = TextReader.Synchronized(process.StandardOutput);