c# Task多任务多线程有关问题

c# Task多任务多线程问题
想通过task解决多任务事情;
需求是这样的:
有100个任务,允许同时运行5个线程task来执行,执行过程中,任意线程完成后,自动把新任务分配给它执行,
直到100个任务全部完成!


------解决思路----------------------
1.开5个task
2.把任务放进队列
3.线程函数先去队列里取任务,然后执行
------解决思路----------------------
有一个总的内存列表,任何一个线程完成任务,去那个列表中取任务
------解决思路----------------------
#2 和 #3 的思路是正解
------解决思路----------------------
当然这只是思路,会有很多细节的问题了
比如
1.到底用什么东西来当队列,是用Queue还是List,根据方式不同,数据结构也不一样
2.如何避免多线程取到相同的任务?这样要加lock控制的
3.任务是固定一次性添加进去的,还是有另一个线程动态添加的,这个过程也需要加lock
4.当队列里没有任务了改怎么办,是5个线程空跑,还是先退出,留1个线程等任务,有任务了再动态开线程
------解决思路----------------------
既然知道Task,应该也知道Parallel啊。
------解决思路----------------------
同意楼上!

假设你的“任务”的原型是 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();

这就得到所有任务计算结果了。
------解决思路----------------------
设计普通顺序的计算算法,你学好Linq就行了。

并发地查询计算,会写一个AsParallel()就行了。