我对 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>
}
当我在<1>处进入写锁时,在调试器中我可以看到_indexLock.IsWriteLockHeld
为true
,但是当执行步骤到<2>时,我发现_indexLock.IsWriteLockHeld
变成了false
,并且_indexLock.ExitWriteLock
抛出了一个名为"SynchronizationLockException"的异常,其消息为"The write lock is being released without being held"。 我做错了什么?