2012-12-21 66 views
1

我有一個WPF應用程序,我希望可以在啓動時分離兩個數據研究後臺任務。這些後臺任務將打開,解析和關閉文件,然後更新SqlServer數據庫中的數據。這些任務都不需要返回任何內容到顯示線程。這些後臺任務不必運行完成,但我需要避免將文件打開或Sql Server處於意外狀態。用戶可以在任務開始後隨時關閉應用程序。我正在使用來自System.Threading.Tasks命名空間的資源。舉一個例子:如何正常關閉WPF應用程序並運行後臺任務?

var IncorporateTask = Task.Factory.StartNew(CommentIncorporateTask); 
var incorporateTaskDone = IncorporateTask.ContinueWith((antecedent) => IncorporateTaskFinalize(), TaskScheduler.FromCurrentSynchronizationContext()); 

我是否需要採取任何措施,確保這些線程完全關閉掉,並不會延遲關閉應用程序的用戶體驗?

+0

隨着BackGroundWorker有一個支持取消。 – Paparazzi

+0

@Blam,謝謝我現在正在研究這個。 – JimBoone

回答

1

你不需要擔心線程被幹淨地終止。您需要擔心定義後臺工作的事務邊界並確保流程不會在這些邊界內終止。

我建議你將CancellationToken傳遞給後臺任務。當用戶請求退出進程時,您應該:

  1. Cancel令牌源。
  2. Wait上的後臺任務。您可以通過使用異步延續做一些票友(如禁用所有的用戶界面和顯示的動畫,直到後臺任務終止)

它是那麼的後臺任務的責任來檢查取消標記,只要相關性和提前終止如果令牌被取消,並且它不會讓你處於不良狀態。這基本上使後臺任務負責終止可能發生的情況,但允許UI儘早終止請求。

+0

謝謝。它花了一些研究和測試,但這個建議運作良好。 Task Parallel Library非常酷。 – JimBoone

相關問題