Cycle de vie des threads dans .NET Framework

L’état d’un fil dans .NET Framework est expliqué dans ce lien .

J’ai récemment vu cette photo sur un site Web et quelques questions me sont venues à l’esprit:

entrez la description de l'image ici

  1. Le cycle de vie des threads dans le système d’exploitation n’est pas complètement aligné sur le cycle de vie des threads dans .NET Framework. Quelqu’un peut-il fournir une ressource qui correspond aux états du système d’exploitation avec .NET Framework?

  2. Nous n’avons pas d’état appelé Bloqué dans .NET Framework. Quel sera l’état d’un thread s’il émet une demande d’E / S?

  3. Quel est le but de l’état Aborted ? Lorsqu’un thread appelle la méthode Abort() , il passe à l’état AbortRequested et, une fois que le thread a répondu à la demande d’ Abort() , il passe à l’état Arrêté . Alors, quelle est la fonction de l’état Aborted ?

Un thread est bloqué si son exécution a été suspendue par l’une des primitives de synchronisation, telle qu’un verrou ou un mutex. Tout fil qui effectue un travail utile à un moment donné est, par définition, non bloqué à ce moment.

Le cycle AbortRequested/Stopped permet au thread d’effectuer un arrêt ordonné en libérant les ressources acquises et en effectuant d’autres tâches de nettoyage.

http://www.albahari.com/threading/

Réponses à vos questions:

  1. Je ne crois pas que cette cartographie serait aussi utile que vous semblez l’espérer. Je n’en ai jamais rencontré et n’en ai jamais eu besoin.
  2. Un état “bloqué” n’est pas vraiment nécessaire, sauf si vous essayez d’écrire quelque chose comme un détecteur d’interblocage (plutôt avancé). Du sharepoint vue d’un développeur typique, l’état “bloqué” du système d’exploitation est transitoire et peut être ignoré. (Il semble que votre code soit en cours d’exécution, mais le système d’exploitation n’a rien à faire jusqu’à la réception de la réponse async.)
  3. Imaginez l’état Aborted en tant que .NET fournissant un gestionnaire d’exceptions autour de tout le code du thread. Lorsqu’une exception est interceptée, provoquant la mort du thread, .NET le transforme en un état Aborted pour vous. Sinon, vous ne pourrez peut-être pas faire la différence entre une terminaison de fil normale et anormale.