Принудительно выполнить код в порядке?
Я вижу странную проблему в моем коде 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
функция.
Это поможет вам увидеть реальный порядок звонков.