2011-01-06 11 views
5

¿Se garantiza que PLINQ devolverá los resultados de la consulta en el orden de la secuencia original que se está operando, incluso si los resultados se producen en paralelo? Por ejemplo:¿PLINQ conserva el orden original en una secuencia?

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

¿El resultado siempre será "aa, ba, ca, da"?

Respuesta

8

usted tiene que utilizar AsOrdered() para preservar el orden:

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

También puedes ver esto: How to: Control Ordering in a PLINQ Query

Cuestiones relacionadas