Comment terminer un thread en C #?
J'ai voulu tenter ma chance dans le filetage avec C#, je sais peu de choses sur le filetage dans C.
Donc, je voulais juste vous demander si je voulais mettre fin à un fil, je devrais le faire avec smt.Abort()
ou il va "tuer lui-même" après la fonction se termine?
Aussi, est-il quelque chose comme pthread_exit()
en C en C#?
Désolé pour mon anglais. 🙂
source d'informationauteur Bill Skiadas
Vous devez vous connecter pour publier un commentaire.
Thread.Abort
"tuer" le fil, mais c'est à peu près équivalent à:Scénario: Vous voulez éteindre votre ordinateur
Solution: Vous sangle de la dynamite pour votre ordinateur, la lumière, et le lancer.
Il est BEAUCOUP mieux de déclencher une "sortie de la condition", soit par l'intermédiaire de
CancellationTokenSource.Cancel
la définition de certains (en toute sécurité d'accès) "est en cours d'exécution" bool, etc., et l'appel deThread.Join
. C'est plus comme:Scénario: Vous voulez éteindre votre ordinateur
Solution: Vous cliquez sur démarrer, arrêter, et attendre jusqu'à ce que l'ordinateur s'éteigne.
De la résiliation d'un filetage extérieur (de l'extérieur du filetage) est une mauvaise idée, vous ne savez jamais ce que le fil était en train de faire lorsque vous tuer de manière asynchrone. En C#, si votre fil retours de fonction, le thread se termine.
Cet article MSDN Comment: Créer et mettre fin aux Discussions (Guide de Programmation C#) a quelques notes et quelques exemples de code que vous trouverez probablement utile.
Vous n'avez pas besoin de résilier un fil manuellement une fois la fonction terminée.
Si vous frayer un thread à exécuter une méthode, une fois que la méthode a repris le fil sera fermé automatiquement comme il n'a rien d'autre à s'exécuter.*
Bien sûr, vous pouvez manuellement interrompre un thread en appelant simplement
Abort()
mais c'est à peu près l'onu a recommandé en raison du risque thread de l'état de la corruption en raison de peu fiable de détermination de l'endroit où un thread est dans son état d'exécution actuel. Si vous avez besoin pour gérer la mise à mort de threads vous-même, vous pourriez être mieux d'utiliser un CancellationToken. Vous pouvez aussi lire sur les Annulation de la gestion des Threads article sur MSDN.** Qui est, sauf si vous êtes en utilisant un pool de threads pour effectuer votre travail. Vous ne devriez pas vous inquiéter au sujet de l'abandon de ces fils, ils sont réutilisées dans d'autres tâches en file d'attente.