首页 > 解决方案 > '进程无法访问文件'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 类只被实例化一次,并被需要它的各种任务重用(可能像一个单例)。

标签: c#

解决方案


最后我发现是 OneDrive 故障。我暂停它并运行应用程序大约 10 分钟,并且没有收到任何异常(在最多 1 分钟后发生之前)。一旦我恢复 OneDrive(应用程序正在运行),5 或 6 秒后我得到了异常。我没有考虑 OneDrive,因为我认为它是为处理这种情况而设计的,但可能不是。


推荐阅读