Maison > développement back-end > C++ > Comment implémenter élégamment la logique de réessayer en C #?

Comment implémenter élégamment la logique de réessayer en C #?

DDD
Libérer: 2025-01-29 08:32:11
original
453 Les gens l'ont consulté

How to Elegantly Implement Retry Logic in C#?

Réalisez la logique de réessayer la logique élégamment en C #

Dans le développement de logiciels, certaines opérations peuvent devoir être essayées plusieurs fois pour réussir. Les méthodes traditionnelles utilisent généralement le cycle

avec des temps de réception explicites, comme le code suivant:

while

Bien que cette méthode garantit que l'opération sera définie à plusieurs reprises, la compilation peut être compliquée dans différents cas. Des méthodes plus courantes peuvent fournir des solutions plus concises et réutilisables.
int retries = 3;
while (true)
{
    try
    {
        DoSomething();
        break; // 成功!
    }
    catch
    {
        if (--retries == 0) throw;
        else Thread.Sleep(1000);
    }
}
Copier après la connexion

<入> introduire

classe

Retry L'objectif est de créer une classe réutilisable, qui accepte une commission en tant que paramètre et effectue des opérations dans le bloc de test. Le code suivant fournit une implémentation possible:

Retry <<> Utiliser

class
public static class Retry
{
    public static void Do(Action action, TimeSpan retryInterval, int maxAttemptCount = 3)
    {
        Do(() => { action(); return null; }, retryInterval, maxAttemptCount);
    }

    public static T Do<T>(Func<T> action, TimeSpan retryInterval, int maxAttemptCount = 3)
    {
        var exceptions = new List<Exception>();

        for (int attempted = 0; attempted < maxAttemptCount; attempted++)
        {
            try
            {
                return action();
            }
            catch (Exception ex)
            {
                exceptions.Add(ex);
                if (attempted < maxAttemptCount -1)
                {
                    Thread.Sleep(retryInterval);
                }
            }
        }
        throw new AggregateException(exceptions);
    }
}
Copier après la connexion

Cette méthode peut être utilisée de différentes manières pour réaliser la logique de réessayer: Retry

Comme indiqué, cette méthode fournit un moyen flexible de gérer la réessayer, qui peut spécifier le nombre de tentatives, l'intervalle de réessayer et le fonctionnement à exécuter.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal