rationalisation de la logique de réchauffement C # avec des expressions lambda
En C #, les opérations de réessayer sont une tâche courante. Les méthodes traditionnelles impliquent souvent des boucles de réessayer explicites, conduisant à un code verbeux et moins réutilisable. Les expressions de lambda offrent une solution plus élégante.
Cet exemple démontre un wrapper de réchauffement basé sur Lambda réutilisable:
<code class="language-csharp">public static class RetryHelper { public static void Execute(Action action, TimeSpan retryInterval, int maxAttempts = 3) { Execute(() => { action(); return null; }, retryInterval, maxAttempts); } public static T Execute<T>(Func<T> action, TimeSpan retryInterval, int maxAttempts = 3) { var exceptions = new List<Exception>(); for (int attempt = 0; attempt < maxAttempts; attempt++) { try { return action(); } catch (Exception ex) { exceptions.Add(ex); if (attempt < maxAttempts - 1) { Thread.Sleep(retryInterval); } } } throw new AggregateException("Retry attempts failed.", exceptions); } }</code>
Cette classe RetryHelper
résume la logique de réessayer. Vous fournissez l'action (ou la fonction) pour réessayer, l'intervalle de réessayer et le nombre maximal de tentatives.
L'utilisation est simple:
<code class="language-csharp">RetryHelper.Execute(() => SomeMethodThatMightFail(), TimeSpan.FromSeconds(2)); </code>
pour les méthodes renvoyant une valeur:
<code class="language-csharp">int result = RetryHelper.Execute(() => SomeMethodReturningInt(), TimeSpan.FromMilliseconds(500), 5);</code>
Une surcharge asynchrone pourrait facilement être ajoutée pour les opérations asynchrones. Cette approche fournit une solution concise et réutilisable pour gérer la logique de réessayer en C #.
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!