C#监视器。退出Try/Catch
我正在对旧的源代码进行故障排除,遇到了如下语句:C#监视器。退出Try/Catch,c#,multithreading,try-catch,C#,Multithreading,Try Catch,我正在对旧的源代码进行故障排除,遇到了如下语句: if (Monitor.TryEnter(lockObj)) { try { //does something if (failing_condition) { Monitor.Exit(lockObj); throw new Exception("Oops!"); } catch (Exception
if (Monitor.TryEnter(lockObj))
{
try
{
//does something
if (failing_condition)
{
Monitor.Exit(lockObj);
throw new Exception("Oops!");
}
catch (Exception ex)
{
throw ex;
}
finally
{
Monitor.Exit(lockObj);
}
}
}
代码与System.Threading.SynchronizationLockException一起崩溃:从未同步的代码块调用了对象同步方法。
是否有一种安全的方法可以在出现故障的情况下以及正常执行完成时调用Monitor.Exit()?只需在finally块中执行,即使在上面抛出异常,它也会始终运行。此外,还不需要“捕捉”部分
if(Monitor.TryEnter(lockObj)) {
try {
//does something
if(failing_condition) {
throw new Exception("Oops!");
}
}
finally {
Monitor.Exit(lockObj);
}
}
catch
在这种情况下,块将覆盖异常详细信息,这可以在这里使用。