我在调试中检查了这段代码。该文件在执行时存在,字符串内容包含一些文本。
TextWriter.Synchronized(new StreamWriter(tmpOutput)).WriteLine(contents)
此行执行后文件仍为空。 Flush是否自动在Synchronized中运行?还有什么能阻止WriteLine工作吗?
答案 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);
}