c# Task多任务多线程问题

IT流渊 软件开发  2015-01-19 04:01:01
想通过task解决多任务事情;
需求是这样的:
有100个任务,允许同时运行5个线程task来执行,执行过程中,任意线程完成后,自动把新任务分配给它执行,
直到100个任务全部完成!

...全文
241 点赞 收藏 7
写回复
7 条回复
以专业开发人员为伍 2015年01月19日
设计普通顺序的计算算法,你学好Linq就行了。 并发地查询计算,会写一个AsParallel()就行了。
回复 点赞
以专业开发人员为伍 2015年01月19日
同意楼上! 假设你的“任务”的原型是 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();
这就得到所有任务计算结果了。
回复 点赞
暈哥 2015年01月19日
既然知道Task,应该也知道Parallel啊。
回复 点赞
於黾 2015年01月19日
当然这只是思路,会有很多细节的问题了 比如 1.到底用什么东西来当队列,是用Queue还是List,根据方式不同,数据结构也不一样 2.如何避免多线程取到相同的任务?这样要加lock控制的 3.任务是固定一次性添加进去的,还是有另一个线程动态添加的,这个过程也需要加lock 4.当队列里没有任务了改怎么办,是5个线程空跑,还是先退出,留1个线程等任务,有任务了再动态开线程
回复 点赞
alex_suen 2015年01月19日
#2 和 #3 的思路是正解
回复 点赞
bdmh 2015年01月19日
有一个总的内存列表,任何一个线程完成任务,去那个列表中取任务
回复 点赞
於黾 2015年01月19日
1.开5个task 2.把任务放进队列 3.线程函数先去队列里取任务,然后执行
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.5w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告