我想知道一个调用Monitor.TryEnter的故障安全方法。 文档显示它是这样的:如何调用Monitor.TryEnter
if (Monitor.TryEnter(lockObj)) {
try {
// The critical section.
}
finally {
// Ensure that the lock is released.
Monitor.Exit(lockObj);
}
}
由于这是“官方”的方式来称呼它,我毫不犹豫地做任何事情。但我不觉得很舒服代码: 假设我们得到这样一个ThreadAbortException:
if (Monitor.TryEnter(lockObj)) {
// *** ThreadAbortException happens exactly here
try {
[...]
}
finally { [...] }
}
这是否不会离开我是永远不会释放锁?
为什么不使用'lock(lockObj){...}'而不是?此外,ThreadAbortException通常不是问题,因为无论如何,流程/ appdomain都将被拆除。 –
@Lasse:当锁已被占用时,锁将不允许我做别的事情。 threadAbortException不仅在进程被拆除时发生,还有更多的方法来终止线程。 –