我有一些问题ReaderWriterLockSlim
。我无法理解它是如何运作的。ReaderWriterLockSlim和异步 await
我的代码:
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
带有消息“写入锁正在释放而未被占用”。我做错了什么?
'_indexLock'如何初始化?另一个线程是否可以在不同的线程同时在'LoadIndex()'中初始化它? –
也许另一个有权访问_indexLock的线程正在重新初始化它......它肯定不能被另一个线程释放,但可能重新初始化为一个新实例...... –
它不需要线程来获取_indexLock被覆盖。 –