rationaliser la logique de réessayer avec C # Lambda Expressions
Les applications robustes nécessitent souvent des mécanismes de réessayer pour gérer gracieusement les échecs potentiels. Alors que les boucles traditionnelles de réessayer peuvent être complexes et sujets aux erreurs, les expressions C # Lambda offrent une solution plus élégante et réutilisable.
Cet article montre une classe Retry
qui simplifie la logique de réessayer. La fonctionnalité principale est encapsulée dans la méthode Do
, qui accepte une expression de lambda représentant l'opération à retourser.
Voici une implémentation généralisée:
<code class="language-csharp">public static class Retry { public static void Do(Action action, TimeSpan retryInterval, int maxAttemptCount = 3) { var exceptions = new List<Exception>(); for (int attempted = 0; attempted < maxAttemptCount; attempted++) { try { action(); break; // Success! Exit the loop. } catch (Exception ex) { exceptions.Add(ex); if (attempted < maxAttemptCount - 1) { Thread.Sleep(retryInterval); } } } if (exceptions.Any()) { throw new AggregateException(exceptions); } } }</code>
Cette méthode Do
permet des configurations de réchauffement flexibles: spécifiant l'intervalle de réessayer et le nombre maximum de tentatives. Il recueille toutes les exceptions rencontrées et lance un AggregateException
si toutes les tentatives échouent.
L'utilisation de la classe Retry
est simple et intuitive:
<code class="language-csharp">Retry.Do(() => SomeFunctionThatMightFail(), TimeSpan.FromSeconds(1));</code>
Cette approche fournit une manière plus propre, plus maintenable et réutilisable de mettre en œuvre la logique de réessayer en C #, en tirant parti de la puissance et de la concision des expressions de lambda pour une stratégie de gestion des erreurs plus efficace et plus robuste.
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!