Gestion des tâches simultanées avec SemaphoreSlim et Tasks
Pour gérer efficacement les scénarios dans lesquels vous devez limiter le nombre de tâches exécutées simultanément, envisagez d'utiliser un combinaison de SemaphoreSlim et de Tasks, une approche qui adhère aux meilleures pratiques et évite les pièges potentiels associés à ThreadPool.QueueUserWorkItem().
SemaphoreSlim pour limiter la concurrence :
SemaphoreSlim est un outil puissant pour contrôler la concurrence dans .NET. Il vous permet de spécifier un nombre maximum de jetons thread-safe (permis) pouvant être détenus simultanément. Ceci est crucial dans notre scénario, où nous souhaitons limiter le nombre de tâches exécutées à un moment donné.
Tâches pour l'exécution des tâches :
Les tâches représentent des opérations asynchrones qui peut être planifié et géré indépendamment du thread appelant. Ils offrent un moyen plus flexible et plus efficace d'exécuter des tâches par rapport à ThreadPool.QueueUserWorkItem().
Combiner SemaphoreSlim et Tasks :
Pour atteindre votre objectif, suivez ces étapes :
Exemple de code :
SemaphoreSlim maxThread = new SemaphoreSlim(10); for (int i = 0; i < 115; i++) { maxThread.Wait(); Task.Factory.StartNew(() => { // Your task code here }, TaskCreationOptions.LongRunning) .ContinueWith((task) => maxThread.Release()); }
Dans ce exemple :
En utilisant cette approche, vous peut gérer efficacement un ensemble de tâches, en limitant le nombre de tâches exécutées simultanément à la valeur spécifiée, tout en tirant parti des avantages des tâches pour l'exécution de tâches asynchrones.
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!