是否在TextWriter Synchronized中自动刷新?

时间:2017-01-25 01:47:19

标签: c# .net synchronized textwriter

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

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

此行执行后文件仍为空。 Flush是否自动在Synchronized中运行?还有什么能阻止WriteLine工作吗?

1 个答案:

答案 0 :(得分:1)

不,每种方法都没有自动Flush调用。

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

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

如果你需要澄清代码的实现方式 - 请查看源代码 - https://referencesource.microsoft.com/#mscorlib/system/io/textwriter.cs,9e3dd0323cf4ee8b和观察者,所有方法都是在编写器中传递的简单包装器,并添加MethodImplOptions.Synchronized以提供线程安全性:

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