System.IO.SynchronizedStream does not override Close method from Stream.
This leads to unexpected behavior after calling Close on this stream.
> var _stream = Stream.Synchronized(new MemoryStream());
> _stream.CanRead // return true
usual streams do return false when CanRead is called after Close
This is due to Close not closing the underlying stream, whereas CanRead forward the call to it.
Fixed in master