我开发了一个类来写入日志。 它使用 "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);
}
}