Maison > développement back-end > C++ > Comment les expressions Lambda peuvent-elles simplifier la logique de réessayer en C #?

Comment les expressions Lambda peuvent-elles simplifier la logique de réessayer en C #?

Barbara Streisand
Libérer: 2025-01-29 08:51:09
original
729 Les gens l'ont consulté

How Can Lambda Expressions Simplify Retry Logic in C#?

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

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

pour les méthodes renvoyant une valeur:

<code class="language-csharp">int result = RetryHelper.Execute(() => SomeMethodReturningInt(), TimeSpan.FromMilliseconds(500), 5);</code>
Copier après la connexion

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!

source:php.cn
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