C# 为什么Debug.Assert语句有时会失败?
我编写了下面的代码,但有时调试失败。 为什么Debug.Assert语句有时会失败,如何修复它C# 为什么Debug.Assert语句有时会失败?,c#,.net,C#,.net,我编写了下面的代码,但有时调试失败。 为什么Debug.Assert语句有时会失败,如何修复它 public class Warehouse { private int stockCount = 0; public void DecrementStock () { if ( stockCount > 0 ) stockCount--; Debug.Assert ( stockCount >= 0 ) } p
public class Warehouse
{
private int stockCount = 0;
public void DecrementStock ()
{
if ( stockCount > 0 )
stockCount--;
Debug.Assert ( stockCount >= 0 )
}
public void IncrementStock()
{
stockCount ++;
}
}
调用
递减库存
时,表示库存计数
为-1
。if条件将导致跳过stockCount--
,然后stockCount
仍将是-1
,并触发Debug.Assert
如果这些被认为是唯一涉及库存计数的函数,那么
被多次调用,以至于值溢出IncrementStock
,而不进行同步从多个线程调用DecrementStock
根据您的评论,我认为多线程的不同步访问确实是问题所在。这听起来像是多线程问题。我建议在访问
stockCount
成员的周围放置一个锁
public class Warehouse
{
private int stockCount = 0;
private object stockSynch = new object();
public void DecrementStock ()
{
lock(stockSynch)
{
if ( stockCount > 0 )
stockCount--;
Debug.Assert ( stockCount >= 0 )
}
}
public void IncrementStock()
{
lock(stockSynch)
{
stockCount ++;
}
}
}
我使用此服务增加或减少计数,并通过外部服务呼叫。通常工作正常,但有时raise失败。Debug
类方法仅在运行的程序集是在“Debug”模式下构建的情况下工作。当您没有在调试模式下运行时,代码是否“失败”?