我有一种情况,ReadWriterLockSlim抛出异常"System.Threading.SynchronizationLockException - 写锁定被释放而不被保留." 当我尝试执行ExitWriteLock()时.据我所知,这不应该发生,因为进入try块的后续线程将"阻塞"直到他们可以获得锁定.我在这里错过了什么吗?
该问题与此问题非常相似,但没有找到解决方案.
//Code simplified for example.
public class i18nService {
internal static ReaderWriterLockSlim cacheLock = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion);
private string ProcessText()
{
try {
cacheLock.EnterWriteLock();
return "xyz";
}
finally {
cacheLock.ExitWriteLock(); // Error is throwing here.
}
}
}
Run Code Online (Sandbox Code Playgroud)
非常感谢您的帮助 :-)
但是如果在尝试输入锁定时抛出错误,那么它将最终执行,而不会保留它.为什么不简单地变为:
...
finally {
if(cacheLock.IsWriteLockHeld)
cacheLock.ExitWriteLock();
}
...
Run Code Online (Sandbox Code Playgroud)
try {
cacheLock.EnterWriteLock();
return "xyz";
}
finally {
cacheLock.ExitWriteLock(); // Error is throwing here.
}
Run Code Online (Sandbox Code Playgroud)
问:如果cacheLock.EnterWriteLock();失败会怎样?
答:finally声明被执行.
cacheLock.ExitWriteLock(); 被叫试试这个:
private string ProcessText()
{
cacheLock.EnterWriteLock();
try {
return "xyz";
}
finally {
cacheLock.ExitWriteLock(); // Error is throwing here.
}
}
Run Code Online (Sandbox Code Playgroud)
据推测,.NET的设计方式是,如果EnterWriteLock()失败,则锁定被释放(或根本不被保持).
| 归档时间: |
|
| 查看次数: |
5074 次 |
| 最近记录: |