(Comme justification - je n'ai jamais travaillé avec des fils de sorte que la description ci-dessous est juste une idée que je veux que vous critiquez)threads, la file d'attente et flux de travail
La vue d'ensemble des tâches:
- Il y a une liste de certains Objets
- Nous devons vérifier si l'objet a été modifié d'une manière ou d'une autre
- Si elle a été modifiée - appliquez une certaine logique (par exemple - show notify).
Voilà comment je pense qu'il devrait être mis en œuvre:
Nous créons minuterie, chaque minute a déclenché, qui traversent la liste des objets et trouver les objets qui doivent être vérifiés. Après cela, nous ajoutons cet objet (ou pour être spécifique - un objet de tâche, qui contient la description de l'objet et de la tâche: pour vérifier s'il a été mis à jour) dans la file d'attente. Travailleur (un thread dans le pool de threads) attend jusqu'à ce que quelque chose soit ajouté à la file d'attente, et après qu'il est arrivé - il prend la tâche et la traite: vérifie si l'objet a été changé. Si c'est le cas - il ajoute une autre tâche, notification une. Et maintenant un autre worker, qui traite les tâches de notification, va gérer cette tâche, si nécessaire.
Alors, est-ce totalement fausse idée? Qu'est-ce qui peut être amélioré ou changé ici?
UPD: selon la première réponse: L'objet dépend d'une ressource repote, et "change" signifie que certaines données distantes ont changé (ou ont changé d'une manière spécifique). Donc, cela ne peut pas être résolu avec INotifyPropertyChanged
.
Il existe - parce que l'opération de "vérification" peut être "longue", en raison de Object est liée à une ressource tierce partie à distance. – zerkms
"ni aucune obligation de les traiter en parallèle, donc une simple boucle sur eux dans le fil de travail" - dans ce cas, toute la logique de quand faire le travail et quel travail à faire - est en un seul endroit.Et en question j'ai décrit le scénario quand ils sont totalement séparés par la file d'attente: une partie est de prendre une décision de mise à jour, un autre - prendre une décision de traitement, et file d'attente entre eux. – zerkms
Je dirais que cette réponse est plus ou moins juste sur - boucle sur les objets, déclencher une tâche pour aller interroger chaque objet, rendre compte au fil de l'interface utilisateur. De cette façon, vous n'avez pas à vous soucier de gérer les fils de sondage, etc –