Middle
Quelle est la différence entre les threads (Thread) et les tâches (Task) en C#?
sobes.tech IA
Réponse de l'IA
Les threads (Thread) représentent une abstraction de bas niveau du système d'exploitation pour exécuter du code en parallèle. Les tâches (Task) sont une notion de niveau supérieur dans .NET, basée sur un pool de threads, qui simplifie la programmation asynchrone et parallèle.
Principales différences :
- Niveau d'abstraction : Thread travaille directement avec les threads du système d'exploitation. Task est une abstraction gérée par le planificateur (généralement ThreadPool).
- Gestion : La gestion manuelle des threads (création, démarrage, arrêt) peut être complexe. Task est gérée par le planificateur, ce qui facilite leur utilisation.
- Ressources : Créer un nouveau Thread nécessite plus de ressources système que d'utiliser un Task du pool de threads.
- Valeurs de retour et exceptions : Task dispose de mécanismes intégrés pour obtenir des valeurs de retour (
Task<TResult>) et gérer les exceptions non traitées. Pour Thread, cela nécessite une implémentation manuelle. - Asynchronie : Task est étroitement intégré avec les mots-clés
asyncetawait, ce qui simplifie grandement l'écriture de code asynchrone. Thread pour l'asynchronie nécessite une gestion manuelle des callbacks ou autres mécanismes. - Annulation : L'annulation d'une Task est supportée via
CancellationToken. L'annulation d'un Thread nécessite une implémentation manuelle de mécanismes d'interruption.
Exemple de création et d'attente :
// Utilisation de Task
async Task MyTaskAsync()
{
await Task.Delay(100);
Console.WriteLine("Tâche terminée");
}
// Démarrer et attendre la Task
Task t = MyTaskAsync();
await t;
// Utilisation de Thread (approche de bas niveau)
Thread myThread = new Thread(() =>
{
Thread.Sleep(100);
Console.WriteLine("Thread terminé");
});
// Démarrer le Thread
myThread.Start();
// Attendre la fin du Thread (appel bloquant)
myThread.Join();