0

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

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

然而,在这一行执行之后,文件是空的。Flush 会自动在 Synchronized 中运行吗?是否还有其他因素阻止 WriteLine 工作?

4

1 回答 1

1

不,每个方法之后都没有自动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);
    }
于 2017-01-25T02:01:26.073 回答