日期:2014-05-18  浏览次数:20897 次

并行计算如何动态添加任务?
初学.net并行计算不久,请教大家一些问题。

看了一些微软的并行例子,发现都是对已知的Task进行并行。
例如
C# code
Parallel.Invoke(Task1,Task2..)


那么如果我写了一个Task,是动态的数量。
比如Task里调用一个方法或者函数 是需要传入参数的,我通过一个For循环动态的获取需要传入的参数并放入函数执行。这样的情况,怎么样才能并行地执行呢?


另外,
C# code
for (int i = 0; i < path.Length; i++)
                {
                  Parallel.Invoke(() => begintask(path[i]));
                }





C# code
Parallel.For(0, path.Length, (i) => begintask(path[i]));


这两者有什么区别? Parallel.Invoke是否是全局的对可以并行的任务都并行?



------解决方案--------------------
http://blog.csdn.net/xuzhongxuan/article/details/6288105
看看里面有没有需要的
------解决方案--------------------
1.我通过一个For循环动态的获取需要传入的参数并放入函数执行。
-------------------
用队列Queue<T>,加入参数用Enqueue,并行计算提取参数用Dequeue


2.都可能并行
------解决方案--------------------
lock(queue)

if(queue.Count>0)
Parallel.Invoke(() => begintask(queue.Dequeue()));
}
------------------
你再其他地方,比如新线程中
lock(queue)
{
queue.Enqueue(pathstr)
}
---------------
Queue<string> queue=new Queue<string>();