同意楼上!假设你的“任务”的原型是 Func<bool> 类型的一堆函数,那么并发5任务执行他们,就写一句var actions = new List<Func<bool>>(); actions.Add(t1); actions.Add(t2); actions.Add(t3); actions.Add(t4); actions.Add(t5); actions.Add(t6); ............... var result = (from a in actions.AsParallel().WithDegreeOfParallelism(5) select a()).ToList(); 这就得到所有任务计算结果了。
2.把任务放进队列
3.线程函数先去队列里取任务,然后执行
比如
1.到底用什么东西来当队列,是用Queue还是List,根据方式不同,数据结构也不一样
2.如何避免多线程取到相同的任务?这样要加lock控制的
3.任务是固定一次性添加进去的,还是有另一个线程动态添加的,这个过程也需要加lock
4.当队列里没有任务了改怎么办,是5个线程空跑,还是先退出,留1个线程等任务,有任务了再动态开线程
actions.Add(t1);
actions.Add(t2);
actions.Add(t3);
actions.Add(t4);
actions.Add(t5);
actions.Add(t6);
...............
var result = (from a in actions.AsParallel().WithDegreeOfParallelism(5)
select a()).ToList();
这就得到所有任务计算结果了。