ich mit ReaderWriterLockSlim
einige Probleme haben. Ich kann nicht verstehen, wie es funktioniert.ReaderWriterLockSlim und async erwarten
Mein Code:
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>
}
Wenn ich Schreibsperre auf < 1>, in Debugger eingeben kann ich sehen, dass _indexLock.IsWriteLockHeld
true
ist, aber wenn die Ausführung Schritte < 2> Ich sehe _indexLock.IsWriteLockHeld
false
und _indexLock.ExitWriteLock
löst eine Ausnahme SynchronizationLockException
mit der Meldung "Die Schreibsperre wird freigegeben, ohne gehalten zu werden". Was mache ich falsch?
Wie wird '_indexLock' initialisiert? Könnte ein anderer Thread es gleichzeitig mit einem anderen Thread in 'LoadIndex()' initialisieren? –
vielleicht ein anderer Thread, der Zugriff auf _indexLock hat, reinitialisiert es .... es konnte nicht von einem anderen Thread sicher freigegeben werden, aber möglicherweise zu einer neuen Instanz alle zusammen reinitialisiert ... –
Es erfordert keinen Thread zu bekommen _indexLock wird überschrieben. –