Запись является абстрактным методом, что означает, что поведение этого метода определено в подклассах Stream. Некоторые из подклассов Stream могут предоставлять поточно-ориентированные методы записи, а другие - нет. Таким образом, вы не можете сказать, как будет вести себя Stream, если вы вызываете метод Write из разных потоков одновременно, если только вы не знаете, с каким конкретным подклассом Thread вы имеете дело.
Таким образом, вы должны использовать блокировку при работе с объектами Stream, поскольку MSDN говорит, что методы Stream не гарантируют поточно-ориентированную, поэтому, возможно, есть потоки, которые могут прерываться при одновременном вызове.
Но если вы явно используете определенные подклассы Stream и знаете, что он потокобезопасен, блокировка не требуется.