Maison >développement back-end >C++ >Comment puis-je effectuer simplement des appels de méthode non bloquants en C# ?
Simplification des appels de méthodes non bloquantes en C#
C# propose plusieurs façons de créer des méthodes non bloquantes, c'est-à-dire des méthodes qui s'exécutent de manière asynchrone sans arrêter le thread principal. Bien que l'attribut [OperationContract(IsOneWay = true)]
de WCF fournisse cette fonctionnalité, cela peut s'avérer excessif pour des scénarios plus simples.
L'approche la plus simple utilise ThreadPool.QueueUserWorkItem
. Cette méthode ajoute efficacement une tâche au pool de threads, permettant une exécution asynchrone.
Voici un exemple illustratif :
<code class="language-csharp">class Foo { static void Main() { ThreadPool.QueueUserWorkItem(_ => FireAway()); //Asynchronous execution Console.WriteLine("Immediate execution"); } static void FireAway() { System.Threading.Thread.Sleep(5000); Console.WriteLine("Execution after 5 seconds"); } }</code>
Alternativement, C# 5.0 et les versions ultérieures fournissent Task.Run
, offrant un moyen plus moderne et plus concis d'obtenir une exécution asynchrone sur un thread de pool de threads :
<code class="language-csharp">Task.Run(() => FireAway());</code>
ThreadPool.QueueUserWorkItem
et Task.Run
empêchent le thread principal de se bloquer pendant l'exécution de la méthode asynchrone.
Cependant, il est crucial de déterminer si l'achèvement de la méthode est essentiel avant la fin de la méthode Main
. Dans des environnements comme ASP.NET, des mécanismes supplémentaires peuvent être nécessaires pour empêcher l'arrêt prématuré de l'opération asynchrone.
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!