【发布时间】:2020-08-07 18:19:49
【问题描述】:
我似乎无法弄清楚为什么会出现此异常。 这是我正在运行的代码和我尝试过的事情。
public static Boolean IsRunning = false;
public static void Process()
{
Boolean lockTaken = false;
try
{
Monitor.TryEnter(IsRunning, ref lockTaken);
if (lockTaken)
{
// Run code
}
}
catch (Exception e) { e.Log(); }
finally
{
if (lockTaken)
{
Monitor.Exit(IsRunning);
}
}
}
由于某种原因,我在Monitor.Exit(IsRunning); 行抛出了异常,这很奇怪,因为如果监视器成功获得IsRunning 对象的锁定,我只会运行该行代码。有什么可能导致抛出此异常的线索吗?
抛出的异常是对象同步方法是从不同步的代码块中调用的。
【问题讨论】:
-
你没有指定抛出什么异常。
-
@PhonicUK 不需要指定异常的类型。 IsRunning 的类型是 System.Boolean,所以很明显是 SynchronizationLockException :)