Thread vs tâche en C#

Muhammad Maisam Abbas 16 février 2024
  1. Thread en C#
  2. Tâche en C#
  3. Thread vs tâche en C#
Thread vs tâche en C#

Ce tutoriel abordera les similitudes et les différences entre la classe Thread et la classe Task en C#.

Thread en C#

La classe Thread crée un véritable thread au niveau du système d’exploitation en C#. Le thread créé avec la classe Thread prend des ressources comme la mémoire pour la pile, et la surcharge CPU pour le contexte passe d’un thread à un autre. La classe Thread fournit le plus haut degré de contrôle comme la fonction Abort(), la fonction Suspend(), la fonction Resume(), etc. Nous pouvons également spécifier certains attributs au niveau du thread comme la taille de la pile. L’exemple de code suivant nous montre comment créer un thread avec la classe Thread en C#.

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

namespace wait_for_thread {
  class Program {
    static void fun1() {
      for (int i = 0; i < 2; i++) {
        Console.WriteLine("Thread 1");
      }
    }
    static void fun2() {
      for (int i = 0; i < 2; i++) {
        Console.WriteLine("Thread 2");
      }
    }
    static void Main(string[] args) {
      Thread thread1 = new Thread(new ThreadStart(fun1));
      Thread thread2 = new Thread(new ThreadStart(fun2));

      thread1.Start();
      thread2.Start();
      Console.WriteLine("The End");
    }
  }
}

Production:

The End Thread 2 Thread 2 Thread 1 Thread 1

Dans le code ci-dessus, nous avons créé les threads thread1 et thread2 avec la classe Thread en C#.

Tâche en C#

Une classe Task crée une tâche asynchrone au niveau du système en C#. Le planificateur de tâches exécute les tâches créées avec la classe Task. Le planificateur par défaut exécute la tâche dans le pool de threads. Contrairement aux threads créés avec la classe Thread, les tâches créées avec la classe Task ne nécessitent pas de mémoire supplémentaire ni de ressources CPU. La classe Task ne peut pas être utilisée pour spécifier les attributs au niveau du thread comme la taille de la pile. Puisque la classe Task s’exécute sur le pool de threads, toutes les tâches de longue durée peuvent remplir le pool de threads, et la nouvelle tâche peut finir par attendre que les tâches précédentes se terminent. L’exemple de code suivant nous montre comment créer une tâche avec la classe Task en C#.

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

namespace wait_for_thread {
  class Program {
    static void fun1() {
      for (int i = 0; i < 2; i++) {
        Console.WriteLine("Thread 1");
      }
    }
    static void fun2() {
      for (int i = 0; i < 2; i++) {
        Console.WriteLine("Thread 2");
      }
    }
    static void Main(string[] args) {
      Task task1 = Task.Factory.StartNew(() => fun1());
      Task task2 = Task.Factory.StartNew(() => fun2());
      Task.WaitAll(task1, task2);
      Console.WriteLine("The End");
    }
  }
}

Production:

Thread 1 Thread 1 Thread 2 Thread 2 The End

Nous avons créé les tâches task1 et task2 avec la classe Task en C# dans le code ci-dessus.

Thread vs tâche en C#

La classe Thread et la classe Task sont utilisées pour la programmation parallèle en C#. Un Thread est une implémentation de niveau inférieur tandis qu’une Task est une implémentation de niveau supérieur. Cela prend des ressources alors qu’une Task ne le fait pas. Elle offre également plus de contrôle que la classe Task. Un Thread devrait être préféré pour toutes les opérations de longue durée, tandis qu’une Task devrait être préférée pour toutes les autres opérations asynchrones.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

Article connexe - Csharp Thread