TextWriter Synchronized 中是否自动刷新?

Is flushing automatic in TextWriter Synchronized?

我在调试中检查了这段代码。执行时文件存在,字符串内容有一些文字。

        TextWriter.Synchronized(new StreamWriter(tmpOutput)).WriteLine(contents)

执行完这行后文件为空。 Synchronized 中是否自动刷新运行?是否还有其他任何东西阻止 WriteLine 工作?

不,没有在每个方法之后自动Flush调用。

TextWriter.Synchronized 仅保证线程安全 - 这意味着它将防止多个线程 运行 并行调用实例。除此之外没有额外的保证。

请注意,如果在每次操作后提交更改,将显着降低编写器的性能。

如果您需要阐明代码是如何实现的 - 查看源代码 - https://referencesource.microsoft.com/#mscorlib/system/io/textwriter.cs,9e3dd0323cf4ee8b 和观察者,所有方法都是简单的包装器,可以调用在 writer 中传递并添加 MethodImplOptions.Synchronized 以提供线程安全:

    [MethodImplAttribute(MethodImplOptions.Synchronized)]
    public override void Write(char value) {
            _out.Write(value);
    }