我想使用PLINQ方法AsParallel()重写这个Parallel.For循环。据我所知,AsParallel()需要将整个序列传递给它,例如创建数组A,然后调用A.AsParallel()。ForAll或A.AsParallel()。选择。有没有办法让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 ->
答案 0 :(得分:5)
执行此操作的一种方法是使用ParallelEnumerable.Range()
:
ParallelEnumerable.Range(low, high-low+1).Select(fun i -> let a = A.[i] in …)
答案 1 :(得分:1)
您可以使用ParallelEnumerable.Skip和.Take跳过多个元素,然后取一定数量,这实际上可以让您查询范围。
这将是A.AsParallel().Skip(low).Take(high-low+1).Select(...