c# Task多任务多线程问题

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

...全文
896 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
设计普通顺序的计算算法,你学好Linq就行了。 并发地查询计算,会写一个AsParallel()就行了。
  • 打赏
  • 举报
回复
同意楼上! 假设你的“任务”的原型是 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.线程函数先去队列里取任务,然后执行

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧