我正在开发一个 WPF 应用程序,它将有一个“索引服务”作为后台任务运行。索引服务将利用监视文件夹的 FileSystemWatcher - 当文件更改时,索引服务将读取文件内容并更新索引(我使用的是 Lucene.Net)。我的索引服务是单例的,将在应用程序启动期间启动,如下所示:-
new TaskFactory().StartNew(_indexingService.StartService);
该StartService()
方法看起来像这样:-
private readonly ManualResetEvent _resetEvent = new ManualResetEvent(false);
public void StartService()
{
var watcher = new FileSystemWatcher
{
// Set the properties
};
watcher.Changed += UpdateIndexes();
_resetEvent.WaitOne();
}
当应用程序关闭时,我打算调用这个方法,我理解这将结束索引服务后台任务:-
public void StopService()
{
_resetEvent.Set();
}
首先,这是启动和停止应该在应用程序的生命周期内运行的后台任务的正确“模式”吗?
其次,这次关闭会有多“优雅”?假设观察者Changed
事件处理程序已触发并正在遍历文件,读取它们并更新索引。如果任务停止,这个处理会在流程中中止,还是事件处理程序方法会首先运行到完成?