Lorsqu'un thread est annulé via Quels sont les avantages d'une exception d'exception pour la méthode threadabortException dans la méthode principale des threads où thread.abort () code>, une exception threadabortexception est jetée à l'intérieur du fil sur lequel thread.abort () code> a été appelé. Cela conduit le fil à arrêter immédiatement son travail et l'exception bulle de la pile d'appels jusqu'à ce qu'elle laisse la méthode principale du fil. Cela provoque l'abandon du fil. thread.restabort () code> est appelé quand le fil se termine de toute façon après la bloc de capture due à la sortie de sa méthode principale? P> private void ThreadMainMethod( )
{
try
{
while(runningAllowed = true)
{
//Do some work here
}
}
catch ( ThreadAbortException )
{
Thread.ResetAbort( );
}
}
4 Réponses :
Probablement la seule raison pour laquelle vous le feriez serait si vous étiez dans une excellente position pour décider si vous devriez réellement abandonner. P>
Donc, peut-être que le fil l'attraperait, vérifiez le statut de quelque chose, puis revenez à nouveau sur son travail. Cela implique que cela implique que vous utilisiez essentiellement le ' En général, je penserais qu'il n'y a pas beaucoup de cas où c'est une bonne idée, et ce ne serait pas l'avis de modèle ou de mise en œuvre particulier que je puisse penser. P> .abort () code>' pour contrôler le flux de ce fil. Et c'est une mauvaise idée. Vous devriez communiquer avec elle d'une autre manière. P>
C'est exactement ce que je voulais dire ça. Je voulais juste quelques éclaircissements, car je suis en train de regarder actuellement un article de code où la déclaration ci-dessus est utilisée partout.
Voici un bon endroit où il est utilisé: Stackoverflow.com/Questtions/299198/...
Dans votre cas particulier, il ne fait pas vraiment de différence, car le thread sera terminé une fois la méthode effectuée en cours d'exécution. P>
Cependant, dans d'autres cas, vous pouvez avoir une méthode qui fonctionne dans une boucle sans fin. Dans ce cas, vous pouvez arrêter le fil à l'aide de la filetage (je ne dis pas que vous devriez, mais vous pourriez). Si le thread pour une raison quelconque détermine de continuer, malgré l'exception, il doit appeler ResetAbort pour empêcher l'exécution de réactiver automatiquement la filetage. p>
Un scénario que je peux penser, c'est que vous souhaitez supprimer le fil de manière contrôlée. Disons que vous avez un fil de travail qui sonne une ressource. Si le fil principal de l'application invoque Abort code> sur le thread de travailleur, un threadabortexception code> est lancé. Vous pouvez ensuite attraper cette exception dans la méthode de démarrage pour le thread de travailleur, appelez resetAbort code>, puis terminez la méthode en relâchant la ressource, la fermeture des fichiers ouverts / des connexions, etc.: public void ThreadStarter()
{
try
{
RunWorkerLoop();
}
catch (ThreadAbortException)
{
Thread.ResetAbort();
}
// clean up and end gracefully
}
J'ai trouvé que Calling ResetAbort () Code> Pour être d'une grande aide dans Cette implémentation élégante du waitfor avec le délai de sortie em> modèle. P>