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



我开发了一个类来写入日志。 它使用 "StreamWriter.WriteLine((" 函数写入。

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

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

我应该更改我的代码吗?

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

请帮助我。

您应该将

编写器包装在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);
    }
}

最新更新