2016-09-18 4 views
1

Ich bekomme nicht, wie man zwei Liste erzeugende Aufgaben in eine allgemeine Liste kombiniert. Der folgende Code ist unvollständig und/oder falsch, aber ich denke, dass ich mein Dilemma überwinden werde. Die OrderFactory fordert Daten von einem Internet-Server an. Jede OrderFactory wird zu einem späteren Zeitpunkt und unabhängig von einer anderen OrderFactory fertiggestellt. Wie können die von jeder Aufgabe zurückgegebenen Listenaufträge in einer Liste zusammengefasst werden? Beide Aufgaben sollen zusammen starten, kehren aber zu einem anderen Zeitpunkt zurück.Wie man mehrere Listen asynchron kombiniert

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

Was mit einfach falsch 'orders.AddRange (a.Result); orders.AddRange (b.Result); '? –

+0

@SamiKuhmonnen Ugh. Nichts. Auch gefunden Antwort unter http://stackoverflow.com/questions/17197699/awaiting-multiple-tasks-with-difference-results. Vielen Dank. –

+1

Da bei der Kombination von zwei oder mehr Listen nichts asynchron ist, gelten Standardansätze für Kombinationslisten (daher duplizieren). Um die Ergebnisse mehrerer asynchroner Operationen zu erhalten, verwenden Sie den Link @AlanWayne http://stackoverflow.com/questions/17197699/waaiting-multiple-tasks-with-difference-results. –

Antwort

2

Wenn Sie Ergebnisse von Aufgaben hinzufügen a und b-orders, können Sie Methode verwenden 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

Warum nicht warten Task.WhenAll (a, b) ', wird dies Aufruf von Aufgaben" a, b "seriell –

Verwandte Themen