c# - '进程无法访问文件'logs\dashboard.log',因为它正被另一个进程使用。' 在多任务环境中
问题描述
我有以下变量:
private readonly object fileLock = new object ();
在以下函数中使用:
public void LogRaw (string message)
{
lock (fileLock)
{
using (StreamWriter streamWriter = new StreamWriter (Filename, true))
{
streamWriter.Write (message);
streamWriter.Flush ();
streamWriter.Close ();
streamWriter.Dispose ();
}
}
}
该函数由同时执行的不同任务调用。我不明白为什么过了一会儿我收到了这个异常:
System.IO.IOException:“该进程无法访问文件 'logs\dashboard.log',因为它正被另一个进程使用。”
因为我使用了lock
关键字并且因为在函数内部我关闭并处理了streamWriter
.
提前感谢您的帮助。
编辑:为了澄清,这是一个具有多个任务的单个应用程序,因此具有多个线程,但应用程序是一个,我没有运行同一个应用程序的多个实例。此外,Logger 类只被实例化一次,并被需要它的各种任务重用(可能像一个单例)。
解决方案
最后我发现是 OneDrive 故障。我暂停它并运行应用程序大约 10 分钟,并且没有收到任何异常(在最多 1 分钟后发生之前)。一旦我恢复 OneDrive(应用程序正在运行),5 或 6 秒后我得到了异常。我没有考虑 OneDrive,因为我认为它是为处理这种情况而设计的,但可能不是。