2011-01-06 13 views
5

Czy PLINQ gwarantuje, że zwróci wyniki zapytania w kolejności oryginalnej sekwencji operacyjnej, nawet jeśli wyniki są wykonywane równolegle? Na przykład:czy PLINQ zachowuje oryginalną kolejność w sekwencji?

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

Czy wynik będzie zawsze "aa, ba, ca, da,"?

Odpowiedz

8

Musisz użyć AsOrdered() zachować kolejność:

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

również sprawdzić to: How to: Control Ordering in a PLINQ Query

Powiązane problemy