2014-03-26 96 views
1

我想使用.net線程池或任務庫,但是如果機器關機,我無法找到有關線程會發生什麼的任何信息。我的假設是,所有添加和未完成的任務都將丟失。但是,也許我對關於並行任務或線程池一起的錯誤想法。如果線程池中的項目會關閉Windows服務器

該場景很簡單。我添加了一堆任務:

Task.Factory.StartNew(doSomeWork); 

然後有人來關閉這臺機器。如果任務沒有完成會怎麼樣?機器是否在等待,還是隻是關機?有沒有辦法讓它等到它已經關機?

+2

你試過了嗎?我的意思是,用'.Sleep(60000)'(5分鐘)加載幾個任務然後關機並不難。 –

+0

操作系統關心*進程*,而不是線程。確保響應操作系統發送給您的關閉請求,您不會留下任何麪包屑來猜測哪種方式是合適的。 –

+0

我用ThreadPool試了一下,其中的任務確實丟失了,但是我還沒有用Task試過。我希望有一些內置的關機管理,我只是不知何故在文檔中錯過了它。聽起來不像。 –

回答

1

你的應用程序需要專門監聽系統事件,指出系統正在關閉,但它負責制定如何處理這個問題。

在一天結束時不能爲了完成您的任務(也不應該)阻止關機。如果您的應用程序需要確保所有任務都完成,那麼它需要以某種方式記錄完成哪些任務,哪些任務仍處於等待狀態,以便在重新啓動時可以恢復。

參見this MSDN article on System Events for details of handling shutdown notifications