如果锁定对象内部发生异常,是否保持锁定状态?
在ac#线程应用程序中,如果我要锁定对象,可以说一个队列,如果发生异常,该对象会保持锁定状态吗?这是伪代码:
int ii;lock(MyQueue)
{
MyClass LclClass = (MyClass)MyQueue.Dequeue();
try
{
ii = int.parse(LclClass.SomeString);
}
catch
{
MessageBox.Show("Error parsing string");
}
}
据我了解,捕获后的代码无法执行-但我一直在想是否会释放该锁。
回答:
第一; 您是否考虑过TryParse?
in li;if(int.TryParse(LclClass.SomeString, out li)) {
// li is now assigned
} else {
// input string is dodgy
}
锁定将被释放的原因有两个:首先,lock
本质上是:
Monitor.Enter(lockObj);try {
// ...
} finally {
Monitor.Exit(lockObj);
}
第二; 您会捕获并且不会重新抛出内部异常,因此lock
从不实际看到异常。当然,您在整个MessageBox期间都持有该锁,这可能是一个问题。
因此,它将在除了最致命的灾难性不可恢复的异常之外的所有异常中释放。
以上是 如果锁定对象内部发生异常,是否保持锁定状态? 的全部内容, 来源链接: utcz.com/qa/400140.html