Write is an abstract method, which means that the behavior of this method is defined in Stream subclasses. Some Stream subclasses may provide thread-safe Write methods, while others may not. Thus, you cannot tell how the Stream will behave if you call it with the Write method from different threads at the same time, if you do not know which specific subclass of Thread you are dealing with.
Therefore, you should use locking when working with Stream objects, since MSDN says that Stream methods are not guaranteed by thread safety, so there may be threads that can be interrupted when called at the same time.
But if you explicitly use certain subclasses of Stream, and know that they are thread-safe, then there is no need to block.
source share