2011-01-06 7 views
5

PLINQ có được đảm bảo trả về kết quả truy vấn theo thứ tự của chuỗi ban đầu đang được vận hành, ngay cả khi kết quả được tạo song song? Ví dụ:PLINQ có giữ nguyên thứ tự ban đầu trong một chuỗi không?

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

sẽ luôn là kết quả "aa, ba, ca, da"?

Trả lời

8

Bạn phải sử dụng AsOrdered() để giữ gìn trật tự:

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

Ngoài ra kiểm tra này: How to: Control Ordering in a PLINQ Query