Utilisation des threads et du threading

Avec .NET, vous pouvez écrire des applications qui effectuent plusieurs opérations en même temps. Les opérations présentant le risque d’accaparer les ressources d’autres opérations peuvent s’exécuter sur des threads distincts : ce processus est appelé multithreading ou threading libre.

Les applications qui utilisent le multithreading sont plus réactives aux entrées utilisateur, car l’interface utilisateur reste active pendant que les tâches sollicitant beaucoup le processeur s’exécutent sur des threads distincts. Le multithreading est également utile quand vous créez des applications scalables, car vous pouvez ajouter des threads au fil de l’augmentation de la charge de travail.

Notes

Si vous avez besoin de plus de contrôle sur le comportement des threads de l’application, vous pouvez gérer vous-même les threads. Cependant, la programmation multithread est considérablement simplifiée avec les classes System.Threading.Tasks.Parallel et System.Threading.Tasks.Task, PLINQ (Parallel LINQ), les classes de collections simultanées dans l’espace de noms System.Collections.Concurrent et un modèle de programmation basé sur le concept de tâches plutôt que de threads. Pour plus d’informations, consultez Programmation parallèle et Bibliothèque parallèle de tâches (TPL).

Comment créer et démarrer un nouveau thread

Vous créez un thread en créant une instance de la classe System.Threading.Thread. Vous fournissez le nom de la méthode que vous souhaitez exécuter sur le nouveau thread au constructeur. Pour démarrer un thread créé, appelez la méthode Thread.Start. Pour plus d’informations et pour obtenir des exemples, consultez l’article Création de threads et passage de données au démarrage et la référence de l’API Thread.

Comment arrêter un thread

Pour mettre fin à l’exécution d’un thread, utilisez System.Threading.CancellationToken, qui offre un moyen unifié d’arrêter les threads de manière coopérative. Pour plus d’informations, consultez Annulation dans les threads managés.

Parfois, il n’est pas possible d’arrêter un thread de manière coopérative, car il exécute du code tiers qui n’est pas conçu pour une annulation coopérative. Dans ce cas, vous pouvez forcer l’arrêt de son exécution. Pour forcer l’arrêt de l’exécution d’un thread, dans .NET Framework, vous pouvez utiliser la méthode Thread.Abort. Cette méthode lève une ThreadAbortException sur le thread sur lequel elle est appelée. Pour plus d’informations, consultez Destruction de threads. La méthode Thread.Abort n’est pas prise en charge dans .NET Core. Si vous devez forcer l’arrêt de l’exécution d’un code tiers dans .NET Core, exécutez-le dans le processus distinct et utilisez la méthode Process.Kill.

System.Threading.CancellationToken est disponible uniquement à partir de .NET Framework 4. Pour arrêter un thread dans des versions antérieures de .NET Framework, utilisez les techniques de synchronisation de threads afin d’implémenter l’annulation coopérative manuellement. Par exemple, vous pouvez créer le champ booléen volatile shouldStop et l’utiliser pour demander l’arrêt du code exécuté par le thread. Pour plus d’informations, consultez volatile dans la référence C# et System.Threading.Volatile.

Utilisez la méthode Thread.Join pour que le thread appelant attende l’arrêt du thread concerné.

Comment suspendre ou interrompre un thread

Vous utilisez la méthode Thread.Sleep pour suspendre le thread actif pendant un certain laps de temps. Vous pouvez interrompre un thread bloqué en appelant la méthode Thread.Interrupt. Pour plus d’informations, consultez Suspension et interruption de threads.

Propriétés du thread

Le tableau suivant présente certaines des propriétés de Thread :

Propriété Description
IsAlive Retourne true si un thread a été démarré et ne s’est pas encore arrêté normalement ou n’a pas été abandonné.
IsBackground Obtient ou définit une valeur booléenne qui indique si un thread est un thread d’arrière-plan. Les threads d’arrière-plan sont similaires aux threads de premier plan. Toutefois, un thread d’arrière-plan n’empêche pas l’arrêt d’un processus. Une fois que tous les threads de premier plan appartenant à un processus sont arrêtés, le common language runtime met fin au processus en appelant la méthode Abort sur les threads d’arrière-plan encore actifs. Pour plus d’informations, consultez Threads de premier plan et d’arrière-plan.
Name Obtient ou définit le nom d’un thread. Généralement utilisé pour découvrir des threads individuels lors du débogage.
Priority Obtient ou définit une valeur ThreadPriority utilisée par le système d’exploitation pour classer par priorité la planification des threads. Pour plus d’informations, consultez Planification des threads et la référence de ThreadPriority.
ThreadState Obtient une valeur ThreadState contenant les états actuels d’un thread.

Voir aussi