我写了一个代码如下:
var allParams = new List<string>(); // supposingly has 10 items inside it
var secondCollection = new List<string>(); // collection of 100
Parallel.For(0, secondCollection.Count(), new ParallelOptions {
MaxDegreeOfParallelism = 10 }, counter =>
{
callingSomeMethod(params[counter]);
});
我试图找出最好的方法,如何将我的params集合与并行for循环结合起来,使得像下面这样的东西:
所以循环会重复,直到Parallel.For循环结束它的周期......
Paralllel循环可行吗?我不确定如何实现这一点,有人可以帮助我吗?
答案 0 :(得分:0)
所以你有一个&#34;锯齿状数组,&#34;两个不同长度的列表需要压缩在一起进行处理,两个列表中较短的一个根据需要重复。那个呢?
这样的事情怎么样?
var allParams = new List<string>(); // supposingly has 10 items inside it
var secondCollection = new List<string>(); // collection of 100
var queue = new ConcurrentQueue<string>(secondCollection); //Copy of 100
while (queue.Count > 0)
{
Parallel.ForEach(allParams, new ParallelOptions { MaxDegreeOfParallelism = 10 },
(param) =>
{
string item;
bool ok = queue.TryDequeue(out item);
if (ok)
{
callingSomeMethod(param, item);
}
});
}
这个想法是你将较长列表中的项目放在ConcurrentQueue中,然后重复遍历较短列表,直到队列为空。每次迭代都从foreach
循环中的迭代器和队列中获取一个项目,并且可以将这两个项目一起处理。