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
Barbara Streisandoriginal
2025-01-29 08:46:13238parcourir

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>

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!

Déclaration:
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