J'ai un service Windows écrit en dotNet. Il existe un service de travail qui génère des threads de travail à l'aide de Delegate.BeginInvokes. Lorsque le service se bloque, ces threads vont-ils être nettoyés automatiquement? Et si oui, quand?Un service de plantage de dotnet met-il fin à ses propres threads?
Répondre
Tous les sujets créés par votre processus sont à l'intérieur de ce processus. Lorsque votre application bloque votre processus meurt, et tous les threads dans ce processus se terminent brutalement. Ils ne sont pas terminés comme des amis (ils ne reçoivent pas de signal d'abandon ou quoi que ce soit), ils sont simplement tués. Ils peuvent ou ne peuvent pas avoir assez de temps processeur pour terminer l'exécution - dépend plutôt de ce qu'ils faisaient, et à quelle vitesse Windows vide le processus.
Toutes les versions robustes de Windows (2000+) devraient avoir votre processus séparé, donc quand il meurt tout l'espace de processus est vidé et la mémoire est récupérée. Si vous accédiez à des ressources non gérées au moment du crash, alors l'ensemble de l'image change et la réponse est "ça dépend".
que lorsque le service est annulé et déchargé de la mémoire
Le service sera-t-il déchargé même s'il y a encore des threads en cours d'exécution? –
@ [Orion Adrian]: J'en doute. Vous devriez vraiment prendre la responsabilité de gérer votre propre état d'application ;-) –