Introduction à la Parallélisation en C#

Apprenez à paralléliser des tâches et à attendre leur achèvement en utilisant Task.WhenAll et Task.WaitAll dans C#.

Détails de la leçon

Description de la leçon

Dans cette leçon, nous découvrirons comment paralléliser des tâches en C# et attendre leur achèvement grâce aux méthodes Task.WhenAll et Task.WaitAll. Nous examinerons un exemple où nous avons une méthode qui prend du temps à s'exécuter et que nous devons appeler plusieurs fois en parallèle.

Tout d'abord, nous verrons comment lancer plusieurs tâches en parallèle sans attendre à chaque itération d'une boucle for. Ensuite, nous comprendrons pourquoi il est essentiel de vérifier que les tâches peuvent être parallélisées sans conflit d'accès, comme l'écriture dans un même fichier ou l'accès à un même service.

Nous utiliserons une liste de tâches pour stocker ces tâches et utiliserons la méthode Task.WhenAll pour attendre leur achèvement dans du code asynchrone. Pour du code synchrone, nous verrons comment utiliser Task.WaitAll, même si cela nécessite une petite transformation de la liste en tableau. Enfin, nous illustrerons comment éviter les deadlocks et gérer correctement le code synchrone et asynchrone.

Objectifs de cette leçon

Les objectifs de cette vidéo sont de :

  • Montrer comment paralléliser des tâches en C#.
  • Expliquer les différences et utilisations de Task.WhenAll et Task.WaitAll.
  • Illustrer comment éviter les problèmes courants liés à la parallélisation.

Prérequis pour cette leçon

Pour suivre cette vidéo, vous devez avoir :

  • Une compréhension de base du C# et de la programmation asynchrone.
  • Des connaissances sur l'utilisation des tâches (tasks) en C#.

Métiers concernés

Les compétences abordées dans cette vidéo sont applicables dans plusieurs métiers tels que :

  • Développeur Backend pour optimiser les performances des serveurs.
  • Ingénieur Logiciel pour gérer des calculs intensifs en parallèle.
  • Architecte Logiciel pour concevoir des systèmes optimisés.

Alternatives et ressources

Il existe d'autres approches pour gérer la parallélisation en C# comme :

  • Parallel.For et Parallel.Foreach pour des boucles parallélisées.
  • Utilisation des tâches avec Reactive Extensions pour une programmation réactive.

Questions & Réponses

En utilisant 'await' dans chaque itération, nous attendons la fin de la tâche avant de passer à l'itération suivante, ce qui empêche la véritable parallélisation.
'Task.WhenAll' renvoie une tâche permettant d'attendre de manière asynchrone toutes les tâches dans une collection, tandis que 'Task.WaitAll' attend de manière bloquante et nécessite un tableau comme paramètre.
Il est essentiel de vérifier que les tâches accèdent à des ressources distinctes. Si elles partagent une ressource, des mécanismes de synchronisation comme des verrous peuvent être nécessaires.