我有以下变量:
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类仅实例化一次,并由需要它的各种任务重用(可能像单例) .
1 回答
最后我发现是OneDrive故障 . 我暂停了它并运行了大约10分钟的应用程序并且没有收到任何异常(在最长1分钟之后发生之前) . 一旦我恢复OneDrive(应用程序运行),在5或6秒后我得到了异常 . 我没有想到OneDrive,因为我认为它是为处理这种情况而建的,但可能不是 .