[英]Condition false, but code inside the if statement executed
我有以下方法:
public bool ConnectAsync()
{
if (IsConnected)
throw new InvalidOperationException("Socket is already connected");
if (IsConnecting)
{
throw new InvalidOperationException("Attempt to connect in progress");
}
. . .
}
在哪里:
private readonly object padLock = new object();
private bool isConnecting = false;
public bool IsConnected
{
get
{
lock (padLock)
{ return socket.Connected; }
}
}
public bool IsConnecting
{
get
{
lock (padLock)
{ return isConnecting; }
}
private set
{
lock (padLock)
{ isConnecting = value; }
}
}
如果我的变量 isConnecting 为假,为什么执行 if 语句中的代码?
编辑:
如果我使用归档的isConnecting
而不是属性IsConnecting
我有相同的行为。 代码在任何地方都在同一个线程中运行。
编辑 2 :
最后这有效:
lock (padLock)
{
if (IsConnecting)
throw new InvalidOperationException("Attempt to connect in progress");
}
这有效:
{
if (IsConnecting)
throw new InvalidOperationException("Attempt to connect in progress");
}
但为什么?
这可能是调试器和多个线程的问题,尝试将锁定放在if语句的外部而不是属性内部。
调试器中的Expression窗口是触发异常的窗口,而不是代码。 删除表达式(或观察),它应该按预期工作。
这个答案解释了我遇到的问题: https : //stackoverflow.com/a/27552124/1830461
将此格式的某些内容编译为64位可能会导致调试器进入if语句:
if (falseCondition)
throw new Exception();
try { } catch { }
这是Visual Studio中的一个错误。 代码实际上没有执行。 解决方案是忽略它并继续单步执行代码。 在其上放置一个锁定语句会修复它,因为它不再是那种格式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.