“StreamWriter.WriteLine()”函数需要“lock()”吗?

时间:2014-09-16 04:32:04

标签: c#

我开发了一个写日志的类。它用" StreamWriter.WriteLine()"写入功能

logStream.WriteLine(msgWrite);
logStream.Flush();

一些不同的线程使用这个类来编写日志,在一个文本文件中(日志文件对所有线程都是通用的)是否需要lock()函数?

我应该更改我的代码吗?

lock(syncObj)
{
    logStream.WriteLine(msgWrite);
    logStream.Flush();
}

请帮帮我。

1 个答案:

答案 0 :(得分:2)

您应该将您的编写器包装在TextWriter.Synchronized中,正如该文档建议的那样,它确保所有生成的写操作都以线程安全的方式执行。

除此之外,是的,您可以使用lock来执行此操作,但如果有这样的内置功能,我倾向于选择它。

快速而肮脏的实现可能如下所示:

public static class Logs
{
    static Logs()
    {
        _Writer = TextWriter.Synchronized(new StreamWriter(path));
    }

    private static TextWriter _Writer;

    static void LogLine(string line)
    {
        _Writer.WriteLine(line);
    }
}