【问题标题】:Is flushing automatic in TextWriter Synchronized?TextWriter同步中的刷新是否自动?
【发布时间】:2017-01-25 01:47:18
【问题描述】:

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

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

但在执行此行后文件为空。 Flush 会自动在 Synchronized 中运行吗?是否还有其他因素阻止 WriteLine 工作?

【问题讨论】:

    标签: c# .net synchronized textwriter


    【解决方案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);
        }
    

    【讨论】:

    • 我的运气更好:using (TextWriter tw = new StreamWriter(tmpOutput)) { tw.WriteLine(contents); }
    猜你喜欢
    • 2017-06-07
    • 2020-12-08
    • 1970-01-01
    • 2017-06-22
    • 2011-11-19
    • 2014-04-29
    • 2018-09-14
    • 2018-07-03
    • 2023-01-17
    相关资源
    最近更新 更多