Maison >développement back-end >C++ >Comment puis-je exécuter plusieurs tâches de manière séquentielle avec un nombre limité de tâches simultanées dans .NET ?

Comment puis-je exécuter plusieurs tâches de manière séquentielle avec un nombre limité de tâches simultanées dans .NET ?

DDD
DDDoriginal
2024-12-28 10:29:18877parcourir

How Can I Run Many Tasks Sequentially with a Limited Number of Concurrent Tasks in .NET?

Exécuter un ensemble de tâches de manière séquentielle avec des limites de tâches

Supposons que vous ayez un scénario dans lequel vous devez exécuter un grand nombre de tâches (par ex. , 100), mais vous souhaitez limiter le nombre de tâches exécutées simultanément (par exemple, 10). Ce problème peut être résolu efficacement à l'aide de la classe « Task » introduite dans .NET Framework 4.0.

Dans le scénario donné, nous pouvons utiliser la classe « SemaphoreSlim » pour contrôler le nombre maximum de tâches exécutées simultanément. « SemaphoreSlim » vous permet de créer un objet sémaphore qui peut limiter le nombre d'opérations simultanées.

Voici un exemple d'implémentation qui montre comment obtenir le comportement souhaité :

using System.Threading.Tasks;
using System.Threading;

class Program
{
    static void Main()
    {
        // Create a SemaphoreSlim object to limit the number of concurrent tasks to 10
        SemaphoreSlim maxThread = new SemaphoreSlim(10);

        // Create 115 tasks with each task performing a specific action
        for (int i = 0; i < 115; i++)
        {
            // Acquire a permit from the SemaphoreSlim object, blocking if the limit is reached
            maxThread.Wait();

            // Schedule a new task
            Task.Factory.StartNew(() =>
            {
                // Perform your desired task here
            }, TaskCreationOptions.LongRunning)
            // Once the task is complete, release the permit back to the SemaphoreSlim object
            .ContinueWith((task) => maxThread.Release());
        }
    }
}

Dans cette implémentation , chaque tâche acquiert un permis de l'objet 'SemaphoreSlim' avant de pouvoir s'exécuter. Si le nombre maximum de permis (10 dans ce cas) a été acquis, le sémaphore empêche les tâches suivantes d'acquérir des permis jusqu'à ce qu'un permis soit libéré.

En utilisant cette approche, vous pouvez exécuter un ensemble de tâches de manière séquentielle, garantissant que seul un nombre prédéfini de tâches s’exécutent simultanément. Une fois toutes les tâches terminées, la méthode 'Main' se termine, indiquant la fin du programme.

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