Wie kann ich den Zeitablauf ignorieren, während der Debugger den Code angehalten hat?

Ich führe Berechnungen durch, bei denen eine Zeitüberschreitung erforderlich ist, wenn sie zu lang ist. Ich kann eine Zeitüberschreitung von 5 Sekunden festlegen und im gesamten Code regelmäßige Abfragen durchführen. Tatsächlicher Code ist viel komplexer und stark rekursiv und verteilt sich auf viele Klassen. Dies sollte jedoch eine allgemeine Vorstellung davon vermitteln, wie er funktioniert. Grundsätzlich wird jedes Mal, wenn etwas eine Rekursion aufruft oder etwas ausführt, das Zeit in Anspruch nimmt, AssertTimeout () aufgerufen.

private DateTime endTime;
public void PerpareTimeout(int timeoutMilliseconds)
{
    endTime = DateTime.UtcNow.AddMilliseconds(timeoutMilliseconds);
}

public void AssertTimeout()
{
    if (DateTime.UtcNow > endTime)
        throw new TimeoutException();
}

public void DoWork1()
{
    foreach (var item in workItems)
    {
        AssertTimeout();
        DoWork2(item)
    }
}
public void DoWork2(WorkItem item)
{
    foreach (var item in workItems)
    {
        AssertTimeout();
        // ...
    }
}

So tritt das Problem auf, wenn ich einen Debugger angeschlossen habe und die Ausführung pausiere. Ich möchte irgendwie das Timeout für die angehaltene Zeit deaktivieren. Wenn es also 2 Sekunden lang ausgeführt wird, tippe ich auf einen Haltepunkt und warte 5 Minuten. Anschließend wird es nach dem Fortsetzen der Ausführung weitere 3 Sekunden ausgeführt, bevor eine Zeitüberschreitung eintritt.

Ich könnte so etwas gebrauchen:

public void PrepareTimeout(int timeoutMilliseconds)
{
    if (System.Diagnostics.Debugger.IsDebuggerAttached)
        endTime = DateTime.MaxValue;
    else
        endTime = DateTime.UtcNow.AddMilliseconds(timeoutMilliseconds);
}

Aber das gibt im Grunde immer dann eine unendliche Zeitüberschreitung, wenn das Programm in einer Debug-Umgebung ausgeführt wird, und ich möchte, dass es normal abläuft, wenn ich es nicht pausiere.

Gibt es eine Möglichkeit, die verstrichene Zeit zu messen, ohne die vom Debugger angehaltene Zeit zu zählen?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage