Maison > développement back-end > C++ > Comment C # Lambda Expressions peut-elle implémenter proprement la logique de réessayer pour gérer les échecs potentiels?

Comment C # Lambda Expressions peut-elle implémenter proprement la logique de réessayer pour gérer les échecs potentiels?

Barbara Streisand
Libérer: 2025-01-29 08:46:13
original
210 Les gens l'ont consulté

How Can C# Lambda Expressions Cleanly Implement Retry Logic for Handling Potential Failures?

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>
Copier après la connexion

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>
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal