我对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>
}
当我在处输入写锁定时,在调试器中我可以看到
_indexLock.IsWriteLockHeld
是true
,但是当执行步骤到时,我看到_indexLock.IsWriteLockHeld
是false
且_indexLock.ExitWriteLock
引发异常SynchronizationLockException
,并显示消息“写锁正在释放而不被保留”。我做错了什么? 最佳答案
ReaderWriterLockSlim
是线程仿射锁类型,因此通常不能与async
和await
一起使用。
您应该将SemaphoreSlim
与WaitAsync
一起使用,或者(如果您确实需要读/写锁),请使用我的 AsyncReaderWriterLock
from AsyncEx或Stephen Toub's AsyncReaderWriterLock
。
关于c# - ReaderWriterLockSlim和async\await,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19659387/