我正在開發一個將有一個「索引服務」作爲後臺任務運行的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
事件處理程序已經觸發並遍歷文件,讀取它們並更新索引。如果任務已停止,此流程是否會在流程中斷,或者事件處理程序方法是否會首先運行完成?
http://msdn.microsoft.com/en-us/library/dd997364.aspx – Ani