在我們的例子中,我們不希望單個任務崩潰服務(因爲可能它只是壞的數據,所有其他任務都可以正常完成),所以我們只需將所有工作邏輯封裝在try/catch
中,記錄我們遇到的任何異常。我確實有一些異常跟蹤代碼,如果它始終發生故障(例如,網絡或數據庫關閉),則會關閉該服務。但是,如果你的服務只執行一個單獨的任務,並且它的失敗是很好的原因,因此我會停止,那麼我相信編寫代碼來將異常封送回主線程是可行的。當您啓動服務時,您可以保存SynchronizationContext.Current,並在遇到異常時使用它返回主線程。我相信這是停止(恩惠,崩潰)的服務。如果代碼不正確,請原諒代碼。目前我沒有VS在我面前。
void OnStart()
{
_mainThread = SynchronizationContext.Current();
}
void DoWork()
{
try
{
// Do the stuff...
}
catch (Exception e)
{
_mainThread.Post(() => Throw);
}
}
編輯:
關於第二個想法,我想你可以完成你想要的是這樣的...簡單的:)
(Editted在從Ishmaeel意見建議使用Environment.Exit
代替Stop
)
void DoWork()
{
try
{
// Do the stuff...
}
catch (Exception e)
{
LogException(e);
Environment.Exit(1);
}
}
假設第在我希望服務在工作者線程死亡時停止,我該怎麼做? –
相關:[可以用.NET編寫的服務自行終止嗎?](http://stackoverflow.com/q/554276/945456) –