Maison >développement back-end >C++ >Comment puis-je limiter l'exécution de tâches simultanées à 10 à l'aide de tâches C# ?

Comment puis-je limiter l'exécution de tâches simultanées à 10 à l'aide de tâches C# ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-30 06:52:10352parcourir

How Can I Limit Concurrent Task Execution to 10 using C# Tasks?

Gestion de la concurrence avec des tâches : limiter l'exécution simultanée

Dans votre scénario, vous souhaitez exécuter un ensemble de 100 tâches simultanément, mais autorisez uniquement un maximum de 10 tâches à exécuter à un moment donné. Cela implique de gérer efficacement la simultanéité pour garantir une exécution correcte des tâches et une utilisation correcte des ressources.

Pour répondre à cette exigence à l'aide de Tasks, vous pouvez utiliser l'approche suivante :

// Define a SemaphoreSlim to limit concurrent tasks to 10
SemaphoreSlim maxThread = new SemaphoreSlim(10);

// Iterate through the tasks
for (int i = 0; i < 115; i++)
{
    // Wait for the SemaphoreSlim to allow a new task to execute
    maxThread.Wait();

    // Create a new task and schedule it
    Task.Factory.StartNew(() =>
    {
        // Perform the task's operation
    }, TaskCreationOptions.LongRunning)

    // Release the SemaphoreSlim when the task completes
    .ContinueWith((task) => maxThread.Release());
}

Dans cette implémentation :

  1. Un SemaphoreSlim nommé maxThread est créé avec un nombre initial de 10, représentant le nombre maximum de tâches simultanées autorisé.
  2. La boucle parcourt les 115 tâches.
  3. Au sein de chaque itération, le code attend que le SemaphoreSlim acquière un permis, garantissant que pas plus de 10 tâches ne s'exécutent simultanément.
  4. Une fois le permis acquis, une nouvelle tâche est créée à l'aide de Task.Factory.StartNew. L'option TaskCreationOptions.LongRunning indique que l'exécution de la tâche peut prendre plus de temps.
  5. Une suite est ajoutée à la tâche à l'aide de ContinueWith. Lorsque la tâche est terminée, la suite libère le permis sur le SemaphoreSlim, permettant à une autre tâche en attente de commencer à s'exécuter.

Cette approche garantit que seules 10 tâches s'exécutent à un moment donné, gérant efficacement la concurrence et empêchant les ressources la famine.

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