我运行多线程操作,每个操作都会向我的日志文件附加一些信息.问题是,有时日志文件被锁定以进行编辑,同时被其他线程访问,这会引发异常.如何确保日志写得正确?
这是片段
try
{
File.AppendAllText(fileName, appendString);
}
catch (System.Exception )
{
}
Run Code Online (Sandbox Code Playgroud)
现在,我只是忽略了这个例外.这导致一些日志没有被写入.
您需要同步日志写入.
会发生什么是两个线程同时附加到日志文件.
请尝试以下方法:
class Program
{
public static readonly object LogWriteLock = new object();
// The rest of your Program class.
}
Run Code Online (Sandbox Code Playgroud)
然后,在写日志时:
lock (Program.LogWriteLock)
{
File.AppendAllText(fileName, appendString);
}
Run Code Online (Sandbox Code Playgroud)
这样做的是以下内容.您创建一个object(Program.LogWriteLock),用于"同步"您的日志操作.然后,当一个线程写入日志文件时,下一个线程将只是等待第一个线程完成,然后写入.
你甚至可以将它包装成一个漂亮的小助手类,你得到这样的东西:
public static class LogHelper
{
private static readonly object _syncRoot = new object();
public static void AppendToLog(string appendString)
{
lock (_syncRoot)
{
File.AppendAllText("log.txt", appendString);
}
}
}
Run Code Online (Sandbox Code Playgroud)
替换"log.txt"为您的实际日志文件位置.