我想知道一個調用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不僅在進程被拆除時發生,還有更多的方法來終止線程。 –