我有一些問題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被覆蓋。 –