Dans le développement de logiciels, certaines opérations peuvent devoir être essayées plusieurs fois pour réussir. Les méthodes traditionnelles utilisent généralement le cycle
avec des temps de réception explicites, comme le code suivant:
while
int retries = 3; while (true) { try { DoSomething(); break; // 成功! } catch { if (--retries == 0) throw; else Thread.Sleep(1000); } }
<入> introduire
classe
Retry
L'objectif est de créer une classe réutilisable, qui accepte une commission en tant que paramètre et effectue des opérations dans le bloc de test. Le code suivant fournit une implémentation possible:
Retry
<<> Utiliser
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); } }
Cette méthode peut être utilisée de différentes manières pour réaliser la logique de réessayer: Retry
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!