États des threads managés
La propriété Thread.ThreadState fournit un masque de bits qui indique l'état actuel du thread. Un thread se trouve toujours dans au moins un des états possibles dans l'énumération ThreadState, et peut être dans plusieurs états en même temps.
Important |
---|
L'état du thread n'est utile que dans quelques scénarios de débogage.Votre code ne doit jamais utiliser l'état du thread pour synchroniser les activités de threads. |
Lorsque vous créez un thread managé, il se trouve à l'état ThreadState.Unstarted. Le thread reste à l'état Unstarted jusqu'à ce que vous appeliez la méthode Thread.Start, qui met le thread à l'état Running afin que le système d'exploitation puisse planifier son exécution.
Les threads non managés qui entrent l'environnement managé ont déjà démarré. Une fois qu'un thread est démarré, un nombre d'actions peut provoquer une modification de son état. Le tableau suivant répertorie les actions entraînant un changement d'état, ainsi que le nouvel état correspondant.
Action |
Nouvel état résultant |
---|---|
Le constructeur pour la classe Thread est appelé. |
|
Un autre thread appelle la méthode Thread.Start sur le nouveau thread, et l'appel est retourné. |
|
Le thread appelle Thread.Sleep. |
|
Le thread appelle Monitor.Wait sur un autre objet. |
|
Le thread appelle Thread.Join sur un autre thread. |
|
Un autre thread appelle Thread.Suspend. |
|
Le thread répond à une requête Thread.Suspend. |
|
Un autre thread appelle Thread.Resume. |
|
Un autre thread appelle Thread.Abort. |
|
Le thread répond à Thread.Abort. |
Comme l'état Running possède la valeur 0, il n'est pas possible d'effectuer un test binaire pour identifier cet état. En revanche, le test suivant (en pseudo-code) peut être utilisé :
if ((state & (Unstarted | Stopped)) == 0) // implies Running
Les threads peuvent être dans plusieurs états à tout moment donné. Par exemple, si un thread est bloqué sur un appel Monitor.Wait et qu'un autre thread appelle Abort sur ce même thread, le thread aura les états WaitSleepJoin et AbortRequested simultanément. Dans ce cas, dès que le thread retourne à partir de l'appel à Wait ou est interrompu, il reçoit ThreadAbortException.
Dès qu'un thread quitte l'état Unstarted suite à un appel à Start, il ne peut jamais retourner à l'état Unstarted. Un thread ne peut jamais non plus quitter l'état Stopped.
Voir aussi
Référence
Autres ressources
Historique des modifications
Date |
Historique |
Motif |
---|---|---|
Mai 2011 |
Clarification supplémentaire de la relation entre la méthode Thread.Start et l'état Running. |
Commentaires client. |
Mars 2011 |
La relation entre la méthode Thread.Start et l'état Running a été clarifiée. |
Résolution des bogues de contenu. |