Je développe une application WPF qui aura un "service d'indexation" en tâche de fond. Le service d'indexation utilisera un FileSystemWatcher qui surveille un dossier - lorsqu'un fichier change, le service d'indexation lira le contenu du fichier et mettra à jour un index (j'utilise Lucene.Net). Mon service d'indexation est un singleton, et sera lancé lors du démarrage de l'application comme ceci: -Tâche de fond - comment s'arrêter de manière contrôlée?
new TaskFactory().StartNew(_indexingService.StartService);
La méthode StartService()
ressemble à quelque chose comme ceci: -
private readonly ManualResetEvent _resetEvent = new ManualResetEvent(false);
public void StartService()
{
var watcher = new FileSystemWatcher
{
// Set the properties
};
watcher.Changed += UpdateIndexes();
_resetEvent.WaitOne();
}
Lorsque l'application ferme, je compte appeler cette méthode, que je comprends mettra fin à la tâche d'arrière-plan de service d'indexation: -
public void StopService()
{
_resetEvent.Set();
}
tout d'abord, est-ce le bon « modèle » pour le démarrage et arrêter une tâche d'arrière-plan qui devrait fonctionner pendant la durée de vie d'une application? Deuxièmement, à quel point cet arrêt serait-il «gracieux»? Disons que le gestionnaire d'événements Changed
de watcher a déclenché et parcourt les fichiers, les lit et met à jour les index. Si la tâche a été arrêtée, ce traitement sera-t-il interrompu à mi-parcours ou la méthode du gestionnaire d'événements sera-t-elle exécutée en premier?
http://msdn.microsoft.com/en-us/library/dd997364.aspx – Ani