2012-05-06 52 views
1

在我們的應用程序中,我們使用TPL創建任務,只要我們想要進行服務調用即可。我們有一個忙指示符,當任務啓動時設置爲true並在任務完成或發生故障時清除。有沒有辦法以通用方式完成此任務,而不是爲每個創建的任務執行此操作?集中處理TPL創建的新任務前後的操作

一審:

 ComponentViewModel.Instance.IsApplicationBusy = true; 
     ComponentViewModel.Instance.BusyMessage = "Loading..."; 

     var task1 = Task.Factory.StartNew(() => DoTask1()); 
     task1.ContinueWith(antecdent => 
     { 
      ComponentViewModel.Instance.IsApplicationBusy = false; 
      CustomAction1(); 
     } 

二審:

 ComponentViewModel.Instance.IsApplicationBusy = true; 
     ComponentViewModel.Instance.BusyMessage = "Loading..."; 

     var task2 = Task.Factory.StartNew(() => DoTask2()); 
     task2.ContinueWith(antecdent => 
     { 
      ComponentViewModel.Instance.IsApplicationBusy = false; 
      CustomAction2(); 
     } 

相同的邏輯,重複全部通過應用程序只要服務調用時,有沒有辦法避免這種重複?

例如,有一個dragstarted和dragcompleted事件會被所有拖動操作觸發,所以可能通過擴展任務工廠或其他方式來完成taskstarted和taskcompleted事件?

編輯:做出改變,這樣的問題更加clear.You現在可以觀察到,開始和結束任務之前的步驟是一樣的,但不同的功能需要當它運行到完成

回答

0

編輯要爲每個任務執行:看來我誤解了這個問題。創建這個「開始,等待,繼續」作爲一個集中的功能是一個很好的舉措,並能像這樣被創建:

public void DoIt(Action ThingToDo) { 
    ComponentViewModel.Instance.IsApplicationBusy = true; 
    ComponentViewModel.Instance.BusyMessage = "Loading..."; 

    var loadProviderTask = Task.Factory.StartNew(ThingToDo); 
    loadProviderTask.ContinueWith(antecdent => 
    { 
     ComponentViewModel.Instance.IsApplicationBusy = false; 
    } 
} 
+0

嗨,對不起我的問題沒有得到clear.I已編輯question.I想不同任務完成後要執行的函數 –

+0

@VasudevanKannan,然後將其作爲另一個委託參數傳遞給函數,並在繼續中調用它。 – svick

+0

@robrich,你的意思是'Task.Factory.StartNew(ThingToDo)'?另外,.Net中通常的命名約定是以小寫字母開始參數。 – svick