Heim >Backend-Entwicklung >C++ >Wie kann ich einen generischen Timeout-Mechanismus für die Codeausführung in C# implementieren?
C# Universal Code Execution Timeout-Mechanismus: Eine vollständige Anleitung
Bei der Softwareentwicklung ist die Kontrolle der Ausführungszeit von Codeblöcken von entscheidender Bedeutung, insbesondere wenn es um unzuverlässige oder zeitaufwändige externe Abhängigkeiten wie API-Aufrufe oder Datenbankabfragen geht. Dazu ist eine gemeinsame Methode zum Festlegen von Zeitüberschreitungen für einzelne Codezeilen erforderlich.
Implementieren Sie einen universellen Timeout-Mechanismus
Der Kern des Aufbaus eines universellen Timeout-Mechanismus besteht darin, lang laufenden Code zu beenden und mögliche Fehler abzufangen. Hierfür können wir eine mehrschichtige Lösung anwenden:
CallWithTimeout
), die einen Vorgang und eine Timeout-Dauer als Eingabe empfängt. Diese Methode startet die Codeausführung in einem separaten Thread und hängt einen Wrapping-Delegaten an, um den Fortschritt zu verfolgen. TimeoutException
aus. Praktische Bedienung
Im Folgenden sind die spezifischen Implementierungsdetails aufgeführt:
<code class="language-csharp">class Program { static void Main(string[] args) { // 设置 6000 毫秒(6 秒)的超时 CallWithTimeout(FiveSecondMethod, 6000); // 设置 4000 毫秒(4 秒)的超时 CallWithTimeout(FiveSecondMethod, 4000); } static void FiveSecondMethod() { Thread.Sleep(5000); } } static void CallWithTimeout(Action action, int timeoutMilliseconds) { Thread threadToKill = null; Action wrappedAction = () => { threadToKill = Thread.CurrentThread; try { action(); } catch (ThreadAbortException ex) { Thread.ResetAbort(); // 避免强制终止 } }; IAsyncResult result = wrappedAction.BeginInvoke(null, null); if (result.AsyncWaitHandle.WaitOne(timeoutMilliseconds)) { wrappedAction.EndInvoke(result); } else { threadToKill.Abort(); throw new TimeoutException(); } }</code>
Diese Implementierung ermöglicht Ihnen die Ausführung von Code mit genau definierten Zeitüberschreitungen und bietet gleichzeitig Flexibilität und elegante Kontrolle über die Ausführung.
Das obige ist der detaillierte Inhalt vonWie kann ich einen generischen Timeout-Mechanismus für die Codeausführung in C# implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!