Habituellement, ceci est un signe de sur-conception. La grande majorité des programmes n'en ont tout simplement pas besoin.
Si vous vraiment besoin de détecter des boucles infinies dans des threads, alors vous devriez structurer la logique de fil pour être dans une boucle principale et l'ont « checkin » à un chien de garde . La boucle principale est bien sûr infinie (sauf si l'on s'attend à ce que le thread "finisse"), mais cela attirera toutes les boucles infinies imbriquées dans la boucle principale.
Le problème est: qu'est-ce que ce "chien de garde"?
Il ne peut pas s'agir d'un autre thread dans le même AppDomain. Il est complètement inapproprié de Thread.Abort
un thread dans ce scénario.
Il peut s'agir d'un thread dans un AppDomain distinct. Personnellement, je ne suis pas entièrement satisfait du type de nettoyage "meilleur effort mais non garanti" qui se produit pendant le recyclage d'AppDomain, donc j'évite simplement plusieurs AppDomains.
Cela pourrait être un processus. Cette solution est assez courante dans les solutions d'automatisation très importantes.
Il pourrait également s'agir d'un autre ordinateur. Cette solution est utilisée dans solutions d'automatisation critiques. Une grande partie du travail que j'avais l'habitude de faire impliquait des processus de surveillance sur chaque ordinateur combinés avec des ordinateurs de surveillance fournissant une sorte de cluster de basculement de sauvegarde à chaud.
Je peux honnêtement dire, cependant, que 98% du temps cette question est posée, la réponse est "assurez-vous juste de ne pas mettre une boucle infinie dans le fil en premier lieu." En d'autres termes, le coût énorme de la conception et de la mise en œuvre d'une solution de surveillance ne fait tout simplement pas partie des exigences réelles. Les revues de conception et de code combinées à une bonne stratégie de test sont généralement la meilleure solution.