2011-01-06 12 views
5

PLINQ è garantito per restituire i risultati delle query nell'ordine della sequenza originale su cui si sta operando, anche se i risultati sono prodotti in parallelo? Ad esempio:PLINQ conserva l'ordine originale in una sequenza?

new List<String>(){"a", "b", "c", "d"}.asParallel().Select(str => str + "a").asSequential().ToList().ForEach(str => Console.Write(str + ", "); 

il risultato sarà sempre "aa, ba, ca, da,"?

risposta

8

bisogna usare AsOrdered() per preservare l'ordine:

 new List<String>(){"a", "b", "c", "d"} 
      .AsParallel() 
      .AsOrdered() 
      .Select(str => str + "a") 
      .AsSequential() 
      .ToList() 
      .ForEach(str => Console.Write(str + ", ")); 

Verificate anche questo: How to: Control Ordering in a PLINQ Query