2016-09-18 9 views
1

2つのリスト作成タスクを共通のリストに結合する方法はありません。以下のコードは不完全であるか間違っていますが、私はジレンマを取り除くと思います。 OrderFactoryは、インターネットサーバーからデータを要求します。各OrderFactoryは、将来のある時点で完了し、他のOrderFactoryとは独立しています。各タスクから返されたリストオーダーをどのようにして1つのリストにまとめることができますか?両方のタスクは一緒に開始するが、別の将来の時間に戻る。複数のリストを非同期で結合する方法

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(b.Result); '? –

+0

@SamKuhmonen Ugh。何もない。また、http://stackoverflow.com/questions/17197699/awaiting-multiple-tasks-with-different-resultsで回答が見つかりました。ありがとう。 –

+1

2つ以上のリストを結合することに関して非同期的なものはないので、リストを結合するための標準的なアプローチが適用される(したがって重複する)。複数の非同期操作の結果を得るには、@ AlanWayne http://stackoverflow.com/questions/17197699/awaiting-multiple-tasks-with-different-resultsで提供されるリンクを使用します。 –

答えて

2

あなたはordersにタスクabの結果を追加したい場合は、この方法AddRange使用することができます:単に `orders.AddRange(a.Resultと間違って何

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

なぜ '' await Task.WhenAll(a、b) 'を呼び出さないと、' tasks a、b' serialを呼び出す –

関連する問題