锁定块内的异常

c00*_*0fd 11 .net c# locking exception

比方说,如果我在C#代码上有以下块:

public class SynchedClass
{
    public void addData(object v)
    {
        lock(lockObject)
        {
            //Shall I worry about catching an exception here?

            //Do the work
            //arr.Add(v);
        }
    }
    private List<object> arr = new List<object>();
    private object lockObject = new object();
}
Run Code Online (Sandbox Code Playgroud)

我应该尝试捕获lock块内的异常吗?(我主要担心的是锁内部可能会引发异常,这会阻止锁被"解锁".)

ale*_*lex 22

当异常从锁定块中逃逸时,将释放锁定.

那是因为lock(){...}编译器大致翻译成:

Monitor.Enter(obj);
try{

 // contents of the lock block

}finally{
    Monitor.Exit(obj);
}
Run Code Online (Sandbox Code Playgroud)