使用此代码用于非常基本的记录器:
lock (string.Concat("LogWritter_", this.FileName))
{
using (var fileStream = File.Open(this.FileName, FileMode.Append, FileAccess.Write, FileShare.Read))
{
using (var w = new StreamWriter(fileStream))
{
w.Write(message);
}
}
}
当我同时从几个线程尝试它时,我很快就得到了错误:
The process can't access the file because its being used by another file.
为什么锁不能阻止线程同时访问文件?
线程调用同一个实例或不同实例到同一个文件并不重要。另外我认为这可能是因为在 Windows 中写入文件时出现了一些延迟,但在 Linux 上发生了同样的事情。