C# 在静态类中对记录器使用锁时发生异常

C# 在静态类中对记录器使用锁时发生异常,c#,multithreading,logging,locking,C#,Multithreading,Logging,Locking,我正在为我的多线程应用程序创建一个简单的静态日志类。 这是我的日志代码: public static class Logging { private static readonly string _logFile = "files/Logfile.txt"; private static object _obj = new Object(); public static void Log(string logMessages) {

我正在为我的多线程应用程序创建一个简单的静态日志类。 这是我的日志代码:

 public static class Logging
{
    private static readonly string _logFile = "files/Logfile.txt";
    private static object _obj = new Object();
    
    public static void Log(string logMessages)
    {
        lock (_obj)
        {
            using (StreamWriter sw = File.AppendText(_logFile))
            {
                sw.WriteLine(logMessages);
            }
        }
    }
log方法是从多个线程和类调用的。 然而,我不断收到此异常:

 System.IO.IOException: The process cannot access the file \GUI\bin\Debug\files\Logfile.txt' because it is being used by another process.
有人知道原因或解决方案是什么吗?
提前谢谢

我在不同的状态下测试这段代码,但没有得到任何错误,每个任务都在其他任务之后完成。 结果中的错误可能与其他事情有关

        var t1 = new Task(()=> Log(txt));
        var t2 = new Task(()=> Log(txt));
        var t3 = new Task(()=> Log(txt));
        t1.Start();
        t2.Start();
        t3.Start();
        Task.WaitAll(t1, t2, t3);

有没有可能有多个进程尝试这样做?(锁是单个进程)。另外,
File.AppendAllText
可能是一个更简单的选项。@marcGravel它确实从一个程序中被多次调用,但因为它是多线程的,所以它可以并且将同时发生。但是,很难使用所有线程中所有类中的所有方法都能使用的锁对象。为什么很难使用所有方法、类和线程都能使用的锁对象?似乎
静态对象_obj
就是这样一个对象。我不再得到错误thnaks的帮助!我不知道为什么,但我想我用错了锁,不是在代码的这一部分,而是调用日志的代码。