我有一個用.NET 3.5(c#)編寫的windows服務和一個System.Threading.Timer,它在每個回調中產生幾個線程。這些只是普通的線程(沒有線程池),我在每個線程上都設置了IsBackground = true,因爲我只會運行託管代碼。關閉具有線程的Windows服務
當用戶停止服務時,所有線程會發生什麼情況?他們優雅地死亡?我沒有任何通過調用join或abort來管理線程的代碼。假設IsBackground = true足以假定當用戶停止服務時線程將被處置並停止,是否正確?有人通過Service Manager GUI停止Windows服務時會發生什麼?它會在觸發OnStop事件後終止進程嗎?
這對我來說實際上是可以接受的,因爲我已經構建了一個單獨的機制,允許用戶在停止服務之前確定沒有線程。這是通過從Windows Service中運行的ServiceHost公開的2個WCF方法完成的。有一種方法可以停止產生新的線程,另一種方法可以查詢剩餘的線程數。
我只是好奇,如果跳過這些步驟,然後停止該服務會發生什麼......看來的IsBackground有助於實現這一目標:
謝謝,這個作品很棒! – ECC 2015-08-05 15:08:45