ReaderWriterLockSlim i async czekają
Mam z tym problemyReaderWriterLockSlim
. Nie mogę zrozumieć, jak działa magia.
Mój kod:
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>
}
Kiedy wchodzę w blokadę zapisu w <1>, w debuggerze to widzę_indexLock.IsWriteLockHeld
jesttrue
, ale kiedy wykonuję kroki do <2> widzę_indexLock.IsWriteLockHeld
jestfalse
i_indexLock.ExitWriteLock
zgłasza wyjątekSynchronizationLockException
z komunikatem „Blokada zapisu jest zwalniana bez wstrzymania”. Co robię źle?