C# 我是否正确使用锁?

标签 c# multithreading logging locking

我目前正在尝试编写一个线程安全的记录器类。我不太熟悉这方面的正确设计和最佳实践。我的代码有缺陷吗?

public class WriteStuff
{
    private readonly StreamWriter m_Writer;
    private readonly object m_WriteLock = new object ();

    public WriteStuff(String path)
    {
        m_Writer = File.CreateText (path);

        m_Writer.WriteLine ("x");
        m_Writer.Flush ();
    }

    public void ListenTo(Foo foo)
    {
        foo.SomeEvent += new EventHandler<SomeArgs> (Foo_Update);
    }

    private void Foo_Update(object sender, SomeArgs args)
    {
        lock (m_WriteLock) {
            m_Writer.WriteLine (args);
            m_Writer.Flush ();
        }
    }
}

最佳答案

嗯,我觉得没问题;我可能会实现 IDisposable 作为 Close() 文件的一种方式,但是......

当然,您也可以使用任何(许多)预制日志记录框架。


更新:

一个想法:您可能想考虑如果文件已经存在会发生什么;你不想踩踏你的日志......

关于C# 我是否正确使用锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/721212/

相关文章:

c# - 通过 C# 中的 DataContracts 读取 JSON 时的可选字段

c# - Entity Framework 如何管理数据库连接?

c - 使用 CreateThread() 在 C 中线程化

java - 为什么同步方法不适用于多线程

java - 在哪里可以找到有关 Java SimpleFormatter 格式字符串的文档?

java - 如何测量分布式系统中的请求时间?

python - 在 python 中创建模块范围的记录器是好的设计吗?

c# - IE 想要下载 JSON 结果....MVC3

c# - 一个属性返回另一个类的成员而不是在构造函数中设置属性有什么好处吗?

c++ - 线程同步没有得到预期的输出