2013-04-25 5 views
4

Я хотел бы переписать этот цикл Parallel.For, используя метод PLINQ AsParallel(). Насколько мне известно, AsParallel() требует передачи ему целой последовательности, например, создать Array A, затем вызвать A.AsParallel(). ForAll или A.AsParallel(). Есть ли способ заставить AsParallel() работать с диапазоном - в данном случае, от низкого до высокого?Использование PLINQ AsParallel() в диапазоне

for k = 2 to m+n do 
    let low = max 1 (k-m) 
    let high = min (k-1) n 
    Parallel.For(low, high + 1, (fun j -> 

ответ

1

Вы можете использовать ParallelEnumerable.Skip и .Take пропустить ряд элементов, а затем взять определенное количество, которое по существу позволяет запросить диапазон.

Это будет A.AsParallel().Skip(low).Take(high-low+1).Select(...

5

Один из способов сделать это было бы использовать ParallelEnumerable.Range():

ParallelEnumerable.Range(low, high-low+1).Select(fun i -> let a = A.[i] in …) 

 Смежные вопросы

  • Нет связанных вопросов^_^