Maison >développement back-end >C++ >Comment puis-je exécuter plusieurs tâches simultanément avec un nombre limité de threads à l'aide de C# ?

Comment puis-je exécuter plusieurs tâches simultanément avec un nombre limité de threads à l'aide de C# ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-02 15:08:38664parcourir

How Can I Execute Multiple Tasks Concurrently with a Limited Number of Threads Using C#?

Exécuter des tâches simultanément avec des threads limités

Problème :

Supposons que vous ayez un ensemble de tâches qui doivent être exécutées séquentiellement, avec seulement un maximum de X tâches exécutées à la fois. Traditionnellement, ThreadPool.QueueUserWorkItem() était utilisé pour de telles tâches, mais elle est désormais considérée comme une approche sous-optimale.

Solution utilisant des tâches :

Pour atteindre cette limitation de concurrence en utilisant Tâches, nous pouvons utiliser un objet SemaphoreSlim pour gérer le nombre de threads disponibles. Voici un extrait de code démontrant l'approche :

SemaphoreSlim maxThread = new SemaphoreSlim(10);

for (int i = 0; i < 115; i++)
{
    maxThread.Wait();
    Task.Factory.StartNew(() =>
        {
            // Your task implementation
        }, TaskCreationOptions.LongRunning)
    .ContinueWith((task) => maxThread.Release());
}

Voici comment fonctionne le code :

  • Initialisation de SemaphoreSlim : Un SemaphoreSlim est initialisé avec un nombre maximum de threads de 10, ce qui permet d'exécuter jusqu'à 10 tâches simultanément.
  • Exécution de la tâche : Pour chaque tâche à exécuter, la méthode Wait() du sémaphore est appelée, qui se bloque jusqu'à ce qu'un thread devienne disponible. Une fois qu'un fil est libre, une nouvelle tâche est démarrée à l'aide de Task.Factory.StartNew().
  • Achèvement de la tâche : Une fois chaque tâche terminée, la méthode ContinueWith() attachée à la tâche est libérée. le thread utilisé en appelant la méthode Release() du sémaphore.
  • Exécution séquentielle : En raison de la disponibilité limitée des threads appliquées par le sémaphore, les tâches sont exécutées séquentiellement, avec un maximum de 10 tâches exécutées à un moment donné.

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!

Déclaration:
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