2012-01-28 33 views
1

我希望我能以某種方式定義,然後chainem在一個不錯的方式到得到類似這樣的代碼:定義和鏈接任務分別

Task ShowLoadNotificationTask = new Task(() => ShowLoadNotification(frm)); 
Task LoadAllWorkOrdersTask = new Task(() => LoadAllWorkOrders()); 
Task CloseLoadNotificationTask = new Task(() => CloseLoadNotificationTask(frm)); 

ShowLoadNotificationTask.ContinueWith(LoadAllWorkOrdersTask); 
LoadAllWorkOrdersTask..ContinueWith(CloseLoadNotificationTask); 

ShowLoadNotificationTask.Start(); 

當然上面的代碼是不正確的,但如何得到類似於上面的工作?

回答

1

這聽起來像你想獨立構造Task實例,然後將它們組合成一個單一的Task。如果是的話那麼你正在尋找的是在System.Core程序定義的Unwrap擴展方法

Task parent = ShowLoadNotificationTask 
    .ContinueWith(_ => LoadAllWorkOrdersTask) 
    .Unwrap() 
    .ContinueWith(_ => CloseLoadNotificationTask) 
    .Unwrap(); 

Unwrap方法接受一個Task<Task>並返回一個Task(也是如此Task<Task<T>>,這樣您就可以返回一個Task作爲現有的Task的繼續並獲取返回的原始Task類型。