Nic*_*eed 0 c# multithreading try-catch
我正在对旧的源代码进行故障排除,并且遇到了这样的声明:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
代码崩溃了 System.Threading.SynchronizationLockException: Object synchronization method was called from an unsynchronized block of code.
有没有一种安全的方法来调用Monitor.Exit()失败的条件和正常的执行完成?
只需在finally块中执行它,即使上面抛出异常,它也始终运行.捕获部分也是不必要的.
if(Monitor.TryEnter(lockObj)) {
try {
//does something
if(failing_condition) {
throw new Exception("Oops!");
}
}
finally {
Monitor.Exit(lockObj);
}
}
Run Code Online (Sandbox Code Playgroud)