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
Libérer: 2025-01-02 15:08:38
original
664 Les gens l'ont consulté

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

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