Принудительно выполнить код в порядке?

Я вижу странную проблему в моем коде 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 ответ

Добавить трассировку или журналы к вашему коду в IncrementIgnoreCount, DecrementIgnoreCount а также HandleError функция.

Это поможет вам увидеть реальный порядок звонков.

Другие вопросы по тегам