强制代码按顺序执行?

时间:2017-03-09 11:41:20

标签: c# order-of-execution

我在C#代码中看到一个奇怪的问题。我有这样的事情:

public static class ErrorHandler {
  public static int ErrorIgnoreCount = 0;
  public static void IncrementIgnoreCount() {
    ErrorIgnoreCount++;
  }
  public static void DecrementIgnoreCount() {
    ErrorIgnoreCount--;
  }
  public static void DoHandleError() {
    // actual error handling code here
  }
  public static void HandleError() { 
    if (ErrorIgnoreCount == 0) {
      DoHandleError();
    }
  }
}

public class SomeClass {

  public void DoSomething() {
    ErrorHandler.IncrementIgnoreCount();
    CodeThatIsSupposedToGenerateErrors(); // some method; not shown
    ErrorHandler.DecrementIgnoreCount();
  }
}

问题是编译器经常决定DoSomething()方法中三个调用的顺序并不重要。例如,递减可以在递增之前发生。结果是,当运行应该生成错误的代码时,错误处理代码会触发,这是我不想要的。

我该如何防止这种情况?

1 个答案:

答案 0 :(得分:0)

IncrementIgnoreCountDecrementIgnoreCountHandleError功能中为您的代码添加跟踪或日志。

这将有助于您查看真实的通话订单。