Utilisation de la classe Parallel en C# pour l'exécution simultanée de tâches

Utilisation de la classe Parallel en C# pour l'exécution simultanée de tâches

Introduction

La classe Parallel est un outil puissant dans le langage de programmation C#, permettant l'exécution simultanée de tâches pour améliorer les performances d'une application. Elle facilite la programmation parallèle en fournissant des abstractions pour lancer et gérer l'exécution de plusieurs threads ou tâches en parallèle. Dans cet article, nous explorerons les fonctionnalités de base de la classe Parallel et fournirons des exemples de code pour illustrer son utilisation.

Utilisation de base

La classe Parallel fait partie de l'espace de noms System.Threading.Tasks dans .NET. Pour l'utiliser, il faut inclure l'instruction using System.Threading.Tasks; dans votre code.

La méthode la plus couramment utilisée dans Parallel est Parallel.For, qui permet d'effectuer une boucle itérative de manière parallèle. Voici un exemple simple :


using System;
using System.Threading.Tasks;

class Program
{
    static void Main()
    {
        Parallel.For(0, 10, i =>
        {
            Console.WriteLine("Itération {0}, Thread : {1}",
                i, Task.CurrentId);
        });

        Console.ReadLine();
    }
}
    

Dans cet exemple, nous utilisons `Parallel.For` pour exécuter une boucle itérative de 0 à 9. Chaque itération est traitée par un thread distinct, qui affiche le numéro de l'itération et l'identifiant du thread en cours. L'exécution des itérations peut se faire dans un ordre aléatoire en raison de la nature parallèle de l'exécution.

Exécution parallèle de méthodes

La classe Parallel permet également d'exécuter plusieurs méthodes simultanément en utilisant la méthode Parallel.Invoke. Voici un exemple :


using System;
using System.Threading.Tasks;

class Program
{
    static void Main()
    {
        Parallel.Invoke(
            () => Method1(),
            () => Method2(),
            () => Method3()
        );

        Console.ReadLine();
    }

    static void Method1()
    {
        Console.WriteLine("Méthode 1 exécutée");
    }

    static void Method2()
    {
        Console.WriteLine("Méthode 2 exécutée");
    }

    static void Method3()
    {
        Console.WriteLine("Méthode 3 exécutée");
    }
}
    

Dans cet exemple, les méthodes Method1, Method2, et Method3 sont exécutées simultanément grâce à Parallel.Invoke. Chaque méthode affiche un message à la console. L'ordre d'exécution des méthodes peut varier à chaque exécution du programme.

Gestion de boucles parallèles

La classe Parallel fournit également des fonctionnalités avancées pour gérer les boucles parallèles. Par exemple, la méthode Parallel.ForEach permet d'itérer sur une collection tout en exécutant les itérations en parallèle. Voici un exemple :


using System;
using System.Threading.Tasks;

class Program
{
    static void Main()
    {
        string[] names = { "Alice", "Bob", "Charlie", "Dave" };

        Parallel.ForEach(names, name =>
        {
            Console.WriteLine("Bonjour, {0}! Thread : {1}",
                name, Task.CurrentId);
        });

        Console.ReadLine();
    }
}
    

Dans cet exemple, nous utilisons Parallel.ForEach pour itérer sur un tableau de noms. Chaque nom est traité par un thread distinct, qui affiche un message de salutation contenant le nom et l'identifiant du thread en cours.

Conclusion

La classe Parallel en C# facilite la programmation parallèle en fournissant des fonctionnalités pour l'exécution simultanée de tâches. Dans cet article, nous avons exploré les bases de l'utilisation de Parallel avec des exemples de code. N'hésitez pas à expérimenter davantage avec cette classe pour exploiter pleinement les performances de votre application en utilisant le parallélisme.


Christophe Leuenberger
Développeur .NET Full Stack

Commentaires

Posts les plus consultés de ce blog

Data Binding dans WPF : Le guide pour les Développeurs

Le Design Pattern Proxy en C# avec la Classe Lazy

Découvrez Blazor : Le Futur de la Programmation Web avec .NET