以下代码来自MSDN:
private ReaderWriterLockSlim cacheLock = new ReaderWriterLockSlim();
private Dictionary<int, string> innerCache = new Dictionary<int, string>();
public void Add(int key, string value)
{
cacheLock.EnterWriteLock();
try
{
innerCache.Add(key, value);
}
finally
{
cacheLock.ExitWriteLock();
}
}
Run Code Online (Sandbox Code Playgroud)
我在其他地方看到过这样的代码.EnterWriteLock()总是在try块之外.有谁知道为什么它不在try块内?
Hen*_*man 17
假设EnterWriteLock()失败了.无论出于何种原因
那么你不应该做的一件事是退出你从未输入过的锁.
这是一个非常基本的模式,例如也适用于流,但由于using() {}声明而不常见.
var s = File.Create(...);
// (only) if the previous line succeeded,
// we gain the responsibility to close s, no matter what
try
{
// do some I/O
}
finally
{
s.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
因为那将是一个错误.在确定输入之前,不能调用ExitWriteLock.想象一下如果你将它移到try {}中会发生什么,并且EnterWriteLock()会抛出异常.这是一个双kaboom.Kabloom,搞砸了异常消息.
| 归档时间: |
|
| 查看次数: |
2169 次 |
| 最近记录: |