Maison > développement back-end > C++ > Comment SemaphoreSlim et Tasks peuvent-ils être utilisés pour gérer efficacement les tâches simultanées ?

Comment SemaphoreSlim et Tasks peuvent-ils être utilisés pour gérer efficacement les tâches simultanées ?

DDD
Libérer: 2024-12-31 10:53:09
original
773 Les gens l'ont consulté

How Can SemaphoreSlim and Tasks Be Used to Manage Concurrent Tasks Efficiently?

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 :

  1. Créez une instance SemaphoreSlim avec le nombre maximum souhaité de tâches simultanées (10 dans votre cas).
  2. Pour chaque tâche, créez et démarrez une nouvelle tâche.
  3. Ajoutez une suite à chaque tâche pour libérer le permis SemaphoreSlim une fois la tâche terminée.

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());
}
Copier après la connexion

Dans ce exemple :

  • maxThread est l'instance SemaphoreSlim qui limite le nombre de tâches à 10 simultanément.
  • Wait() acquiert un permis du SemaphoreSlim, garantissant que la limite maximale de concurrence est respecté.
  • Task.Factory.StartNew() crée et démarre une nouvelle tâche pour chaque tâche.
  • ContinueWith() ajoute une suite à chaque tâche qui libère le permis SemaphoreSlim une fois la tâche terminée.

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!

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