wiederzusetzen In der Softwareentwicklung müssen einige Vorgänge möglicherweise mehrmals ausprobiert werden, um erfolgreich abzuschließen. Traditionelle Methoden verwenden normalerweise den
-Zyklus mit expliziten Wiederholungszeiten, wie z. B. dem folgenden Code:
while
int retries = 3; while (true) { try { DoSomething(); break; // 成功! } catch { if (--retries == 0) throw; else Thread.Sleep(1000); } }
<入> Einführung
Klasse
Retry
Ziel ist es, eine wiederverwendbare -Klasse zu erstellen, die eine Kommission als Parameter akzeptiert und Operationen im Re -Test -Block ausführt. Der folgende Code bietet eine mögliche Implementierung:
Retry
<<> Verwenden Sie
public static class Retry { public static void Do(Action action, TimeSpan retryInterval, int maxAttemptCount = 3) { Do(() => { action(); return null; }, retryInterval, maxAttemptCount); } public static T Do<T>(Func<T> action, TimeSpan retryInterval, int maxAttemptCount = 3) { var exceptions = new List<Exception>(); for (int attempted = 0; attempted < maxAttemptCount; attempted++) { try { return action(); } catch (Exception ex) { exceptions.Add(ex); if (attempted < maxAttemptCount -1) { Thread.Sleep(retryInterval); } } } throw new AggregateException(exceptions); } }
Diese Methode kann auf verschiedene Weise verwendet werden, um die Wiederholungslogik zu erreichen: Retry
Das obige ist der detaillierte Inhalt vonWie kann ich elegant wieder in C#implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!