2013-03-27 64 views
1

當應用程序要關閉時,是否有任何框架支持,但有一些未完成的任務?
如何不讓應用程序在任務運行時退出

任務默認在後臺線程的上下文中運行。有時,它的確定只是爲了讓任務完成:

Task.Factory.StartNew(() => 
          { 
           Thread.CurrentThread.IsBackground = false; 
           Thread.Sleep(20000); 
           Thread.CurrentThread.IsBackground = true; 
          }); 

但是如果任務有需要completition延續這不起作用。特別是如果某些任務將在UI線程下運行。
可以通過WhenAll()獲得所有「最終」任務並推遲應用程序退出。
但是我不知道如何使用async/await時也是這樣。

所以我想知道是否有這種情況下的任何支持。框架提供了什麼保證或者如何執行它們?

我現在看到的唯一方法是將標誌設置爲關鍵任務尚未完成的標誌。

回答

0

另外,您不應該在線程池線程上設置IsBackground

對於async方法,確保您的方法返回Task而不是void,然後你可以使用WhenAllawait他們。您可以讓您的事件處理程序捕獲頂級Task而不是await它們。

+0

你能說明將IsBackground設置爲false會出現什麼問題嗎? – 2013-03-27 12:11:57

+1

這是一個線程池線程;它不屬於你。 – 2013-03-27 12:45:29

+0

但是我的任務一直擁有它,直到完成。而且我只在那個時期設置了IsBackground = false。我錯過重要的事情嗎? – 2013-03-27 13:23:42

相關問題