ParallelEnumerable
có thành viên tĩnh AsParallel
. Nếu tôi có số IEnumerable<T>
và muốn sử dụng Parallel.ForEach
thì điều đó có nghĩa là tôi phải luôn sử dụng AsParallel
?Parallel.ForEach có yêu cầu AsParallel()
ví dụ: Cả hai đều đúng (mọi thứ khác đều bình đẳng)?
mà không AsParallel
:
List<string> list = new List<string>();
Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)), f => list.Add(f));
hoặc với AsParallel
?
List<string> list = new List<string>();
Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)).AsParallel(), f => list.Add(f));
Hmmm ... những gì chính xác là parrallelizing kiểu liệt kê? hoặc ít nhất thì việc paralleization đó có thể tách rời khỏi phái đoàn nhiệm vụ được không? – dkackman
@dkackman '.AsParallel()' đọc số đếm để thực hiện song song, cụ thể là phiên bản song song của '.SelectMany()' trong trường hợp này. Hãy suy nghĩ về một mệnh đề có mệnh đề 'Where' khổng lồ nhưng không có thứ tự, chúng ta có thể đánh giá mệnh đề where cùng một lúc với nhiều lõi nhất có thể cho phép tiếp theo trong liệt kê chuỗi tiếp theo, làm cho nó nhanh hơn' n' lần. Những gì chúng ta làm với kết quả đó cũng có thể được xử lý theo cùng một cách sau đó, hoặc đồng bộ trong một luồng hoặc lan truyền qua các lõi khi có sẵn, đó là phần 'Parallel.ForEach' hoặc' .ForAll', có ý nghĩa không? –
Điều đó có ý nghĩa. Cảm ơn Nick. – dkackman