我在调试中检查了这段代码。该文件在执行时存在,并且字符串内容有一些文本。
TextWriter.Synchronized(new StreamWriter(tmpOutput)).WriteLine(contents)
然而,在这一行执行之后,文件是空的。Flush 会自动在 Synchronized 中运行吗?是否还有其他因素阻止 WriteLine 工作?
我在调试中检查了这段代码。该文件在执行时存在,并且字符串内容有一些文本。
TextWriter.Synchronized(new StreamWriter(tmpOutput)).WriteLine(contents)
然而,在这一行执行之后,文件是空的。Flush 会自动在 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);
}