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

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>

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!

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