我对ReaderWriterLockSlim有一些问题。我不明白这是多么神奇。

我的代码:

 private async Task LoadIndex()
    {
        if (!File.Exists(FileName + ".index.txt"))
        {
            return;
        }
        _indexLock.EnterWriteLock();// <1>
        _index.Clear();
        using (TextReader index = File.OpenText(FileName + ".index.txt"))
        {
            string s;
            while (null != (s = await index.ReadLineAsync()))
            {
                var ss = s.Split(':');
                _index.Add(ss[0], Convert.ToInt64(ss[1]));
            }
        }
        _indexLock.ExitWriteLock();<2>
    }

当我在处输入写锁定时,在调试器中我可以看到_indexLock.IsWriteLockHeldtrue,但是当执行步骤到时,我看到_indexLock.IsWriteLockHeldfalse_indexLock.ExitWriteLock引发异常SynchronizationLockException,并显示消息“写锁正在释放而不被保留”。我做错了什么?

最佳答案

ReaderWriterLockSlim是线程仿射锁类型,因此通常不能与asyncawait一起使用。

您应该将SemaphoreSlimWaitAsync一起使用,或者(如果您确实需要读/写锁),请使用我的 AsyncReaderWriterLock from AsyncExStephen Toub's AsyncReaderWriterLock

关于c# - ReaderWriterLockSlim和async\await,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19659387/

10-10 07:39