J'ai une bibliothèque de classe C# qui démarre un thread de consommation de fond (paresseusement) qui écoute les tâches à compléter à partir d'une file d'attente producteur/consommateur. Cette bibliothèque de classes peut être utilisée à partir de n'importe quel type d'application .NET et est actuellement utilisée sous un site Web ASP.NET MVC. Le thread consommateur est bloqué la plupart du temps jusqu'à ce qu'une requête arrive dans la file d'attente. Il ne devrait y avoir qu'un seul thread consommateur pour un domaine d'application donné. Je veux être en mesure d'arrêter gracieusement le fil du consommateur lorsque l'application quitte, quel que soit le type d'application, par ex. Application Windows Forms, Console ou WPF. Le code de l'application lui-même devrait ignorer le fait que ce thread reste en attente d'être terminé.Meilleures pratiques de gestion de la durée de vie des threads de base
Comment puis-je résoudre ce problème de durée de vie du thread dans la perspective de la bibliothèque de classes? Y a-t-il un événement global d'arrêt d'application que je peux lier pour abattre le fil gracieusement alors? En ce moment, étant donné qu'il se trouve dans un domaine d'application ASP.NET MVC, cela n'a pas vraiment d'importance puisque ceux-ci ne sont jamais abolis de toute façon. Mais maintenant que je commence à l'utiliser dans des tâches d'applications de console programmées conçues pour se terminer, je veux résoudre ce problème une fois pour toutes. L'application console ne se termine pas car le thread consommateur est toujours actif et bloqué en attente de demandes. J'ai exposé une propriété Thread statique publique sur la classe pour émettre un appel Abort()
lorsque l'application console est en cours de sortie, mais c'est franchement dégoûtant.
Tous les pointeurs seraient appréciés! Encore une fois, je ne veux pas avoir à écrire Windows Forms ou WPF ou console code spécifique de l'application pour résoudre le problème. Une bonne solution générique que chaque consommateur de la bibliothèque de classe peut utiliser serait la meilleure.
C'est ce que je cherche! Oui, je sais que «Abandonner()» est dégoûtant; merci pour le conseil sur 'Interrupt()'! –
Vous, monsieur, avez fait ma journée. Merci beaucoup! Plus besoin de l'appel 'Abort()' ou 'Interrupt()'. –
Hmya, il est toujours avorté bien sûr, même si vous n'appelez pas Abort() vous-même. L'effet est identique. –