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.
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