并行计算如何动态添加任务?
初学.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>();