Maison >développement back-end >C++ >Comment réaliser efficacement des appels de méthode non bloquants en C# ?
Créer des méthodes non bloquantes efficaces en C#
Développer des méthodes véritablement non bloquantes en C# nécessite une réflexion approfondie, notamment lorsque l'on vise la rapidité et l'efficacité. Bien que des options telles que [OperationContract(IsOneWay = true)]
de WCF existent, leurs frais généraux dépassent souvent les avantages. Cet article explore des alternatives plus simples et plus efficaces.
Le scénario idéal est un static void NonBlockingMethodFoo()
simple et facilement disponible, mais il n'est pas directement pris en charge. Au lieu de cela, nous pouvons obtenir un comportement non bloquant similaire en utilisant deux approches principales :
1. Tirer parti de ThreadPool.QueueUserWorkItem
:
Cette méthode offre un moyen simple de décharger le travail vers un thread de pool de threads. Il accepte un délégué, permettant l'encapsulation de votre logique non bloquante.
2. Utiliser Task.Run
:
Une approche plus moderne, Task.Run
crée et exécute une tâche sur un thread de pool de threads. Sa syntaxe d'expression lambda simplifie le processus de définition de l'opération non bloquante.
Exemples pratiques :
Considérons une méthode FireAway
simulant un délai de 5 secondes avant d'envoyer un message à la console. Ce qui suit montre une exécution non bloquante en utilisant les deux méthodes :
<code class="language-csharp">// Using ThreadPool.QueueUserWorkItem ThreadPool.QueueUserWorkItem(o => FireAway()); // Using Task.Run Task.Run(() => FireAway());</code>
Considérations importantes :
Bien que ces techniques créent des appels non bloquants, n'oubliez pas qu'elles ne garantissent pas une conclusion immédiate. Si le résultat de la méthode est crucial, vous aurez besoin de mécanismes pour gérer les interruptions potentielles ou garantir que la tâche se termine avec succès. Dans des environnements comme ASP.NET, des stratégies supplémentaires peuvent être nécessaires pour maintenir l'activité des threads jusqu'à la fin de la tâche. Le choix entre ThreadPool.QueueUserWorkItem
et Task.Run
dépend souvent des préférences et du contexte du projet, Task.Run
étant généralement préféré pour sa syntaxe plus claire et sa meilleure intégration avec le modèle de programmation asynchrone du framework .NET.
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!