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);
}
我在调试中检查了这段代码。执行时文件存在,字符串内容有一些文字。
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);
}