2011-08-22 50 views
8

có ai biết nếu có bất kỳ quá tải nào có thể cho phép tôi chỉ định kích thước bước trong vòng lặp Parallel.For không? Các mẫu trong C# hoặc VB.Net sẽ rất tuyệt.Parallel.For kích thước bước

Cảm ơn, Gonzalo

Trả lời

15

Google cho "bước enumerable.range" và bạn sẽ có thể xảy đến cho triển khai luân phiên của Enumerable.Range rằng cung cấp bước dãy. Sau đó, bạn chỉ có thể làm một

Parallel.ForEach(BetterEnumerable.SteppedRange(fromInclusive, toExclusive, step), ...) 

Nếu google không hoạt động, thực hiện, nếu có một cái gì đó như thế này:

public static class BetterEnumerable { 
    public static IEnumerable<int> SteppedRange(int fromInclusive, int toExclusive, int step) { 
     for (var i = fromInclusive; i < toExclusive; i += step) { 
      yield return i; 
     } 
    } 
} 

Cách khác nếu "yield return" cho một trong những jeebies heebie, bạn luôn có thể chỉ tạo danh sách cũ thông thường tại chỗ:

var list = new List<int>(); 
for (int i = fromInclusive; i < toExclusive; i += step) { 
    list.Add(i); 
} 
Parallel.ForEach(list, ...); 

Điều này sẽ dễ dàng được dịch sang VB nếu đó là yêu cầu.

+0

Cảm ơn Dax. Nó sẽ được thêm quá nhiều công việc nếu tôi đang cố gắng để làm điều này trong VB.Net, nơi không có lợi nhuận? – Gonzalo

+0

Không có kinh nghiệm VB, nhưng bạn sẽ có thể sử dụng vòng lặp for để tạo danh sách Integer với các số nguyên bạn cần, và sau đó sử dụng 'Parallel.ForEach' với danh sách đó. –

+0

@Gonzalo: [async CTP] (http://www.microsoft.com/download/en/details.aspx?id=22388) cho phép sử dụng các trình lặp trong VB.NET. – jason

Các vấn đề liên quan