Maison > développement back-end > C++ > Comment puis-je implémenter un mécanisme de délai d'attente générique en C# ?

Comment puis-je implémenter un mécanisme de délai d'attente générique en C# ?

Susan Sarandon
Libérer: 2025-01-23 12:21:10
original
882 Les gens l'ont consulté

How Can I Implement a Generic Timeout Mechanism in C#?

Implémentation d'un mécanisme de timeout universel en C#

Un besoin courant en programmation est de pouvoir exécuter du code avec un délai d'attente spécifié. Cela devient critique lorsqu’il s’agit de systèmes externes ou de code dont l’exécution peut prendre trop de temps. La mise en œuvre d'un mécanisme de délai d'attente commun permet un comportement cohérent sur l'ensemble de la base de code, garantissant que le code qui ne répond pas est traité de manière appropriée.

Dans ce cas, l'objectif est de créer une méthode générique capable d'exécuter n'importe quel code donné dans un délai d'attente spécifié. La solution doit gérer avec élégance les situations dans lesquelles le code dépasse le délai d'attente et fournir un mécanisme pour arrêter son exécution.

Une façon élégante d’y parvenir est d’utiliser des délégués. L'extrait de code suivant illustre une méthode de délai d'attente générique nommée CallWithTimeout qui accepte un délégué d'action et une valeur de délai d'attente en millisecondes :

<code class="language-csharp">static void CallWithTimeout(Action action, int timeoutMilliseconds)
{
    Thread threadToKill = null;
    Action wrappedAction = () =>
    {
        threadToKill = Thread.CurrentThread;
        try
        {
            action();
        }
        catch(ThreadAbortException ex){
           Thread.ResetAbort();// 取消强制中止,以便更好地完成。
        }
    };

    IAsyncResult result = wrappedAction.BeginInvoke(null, null);
    if (result.AsyncWaitHandle.WaitOne(timeoutMilliseconds))
    {
        wrappedAction.EndInvoke(result);
    }
    else
    {
        threadToKill.Abort();
        throw new TimeoutException();
    }
}</code>
Copier après la connexion

Dans cette méthode, un thread séparé est créé pour effectuer l'opération donnée. La clé pour contrôler l’exécution est d’utiliser un délégué d’encapsulation qui capture une référence au thread. Si l'opération dépasse le délai d'attente, le thread se termine correctement et une TimeoutException est levée.

En utilisant ce mécanisme de délai d'attente universel, les développeurs peuvent facilement protéger leur code contre les systèmes externes ou les blocs de code qui ne répondent pas. Il favorise un comportement robuste des applications et améliore la gestion des exceptions potentielles.

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