ReaderWriterLockSlim不解决写入文件的多个线程

Sno*_*lax -1 .net c# task-parallel-library

当我从类I下面运行方法DoStuff()时,我有时会得到一个异常:

The process cannot access the file because it is being used by another process.
Run Code Online (Sandbox Code Playgroud)

为什么会发生?我认为ReaderWriterLockSlim应该解决这个潜在的问题?

public class Test
{
    private ReaderWriterLockSlim lock_ = new ReaderWriterLockSlim();
    public Test()
    {

    }

    public void DoStuff()
    {
        while (true)
        {
            Task[] tasks = new Task[5];
            for (int i = 0; i < 5; i++)
            {
                tasks[i] = Task.Factory.StartNew(() =>
                {
                        lock_.EnterReadLock();
                        try
                        {
                            File.AppendAllText("test.txt", "test");
                        }
                        finally
                        {
                            lock_.ExitReadLock();
                        }
                    }
                });
            }
            Task.WaitAll(tasks);
            Thread.Sleep(5000);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Cha*_*ger 7

读/写锁的重点是允许多个读者和一个作者.从文档:

使用ReaderWriterLockSlim来保护由多个线程读取并由一个线程一次写入的资源.

你正在使用读锁进行编写,所以允许多个线程做同样的事情并不奇怪 - 这就是它的设计目的.

更改您的代码以使用EnterWriteLockExitWriteLock不是.也许阅读文档中的一些示例会很有帮助.