2016-09-18 82 views
1

我不知道如何將兩個列表生成任務合併到一個公共列表中。下面的代碼是不完整和/或錯誤的,但我認爲會讓我陷入困境。 OrderFactory從Internet服務器請求數據。每個OrderFactory在未來某個時間完成並獨立於任何其他OrderFactory。如何將每個任務返回的列表命令合併到一個列表中?兩項任務將一起開始,但將在不同的未來時間返回。如何異步合併多個列表

TIA

 private async Task<List<Orders>> GetReturnToOfficeOrdersAsync(PatientService patient) 
     { 
      var orders = new List<Orders>(); 
      var x = await OrderFactory.CreateOrders(OrderType.RETURNTOOFFICE, patient); 
      orders.AddRange(x); 
      return orders; 
     } 

     private async Task<List<Orders>> GetProceduresAsync(PatientService patient) 
     { 
      var orders = new List<Orders>(); 
      var x = await OrderFactory.CreateOrders(OrderType.PROCEDURE, patient); 
      orders.AddRange(x); 
      return orders; 
     } 


     private async Task GetInCompleteOrderListAsync() 
     { 
      if (patient == null) return; 

      var orders = new List<Orders>(); 

*** THE LISTS FROM THESE TASKS NEED TO BE COMBINED INTO ONE LIST -- HOW???  
      var a = GetReturnToOfficeOrdersAsync(patient); 
      var b = GetProceduresAsync(patient); 
      await Task.WhenAll(a, b); 

      orders = orders.OrderByDescending(o => o.torder).ToList(); 

      IncompleteOrders = new ObservableCollection<Orders>(orders); 
     } 
+1

出了什麼問題只是'orders.AddRange(a.Result ); orders.AddRange(b.Result);'? –

+0

@SamiKuhmonen呃。沒有。也可以在http://stackoverflow.com/questions/17197699/awaiting-multiple-tasks-with-different-results找到答案。謝謝。 –

+1

由於沒有任何關於組合兩個或多個列表的異步 - 組合列表的標準方法適用(因此重複)。要獲得多個異步操作的結果,請使用@AlanWayne提供的鏈接http://stackoverflow.com/questions/17197699/awaiting-multiple-tasks-with-different-results。 –

回答

2

如果你想任務a的結果,並b添加到orders,您可以使用方法AddRange

var orders = new List<Orders>(); 

var a = GetReturnToOfficeOrdersAsync(patient); 
var b = GetProceduresAsync(patient); 

orders.AddRange(await a); // add result of task a to the list 
orders.AddRange(await b); // add result of task b to the list 
+0

爲什麼不等待Task.WhenAll(a,b)',這會調用'任務a,b'串行 –