解决方案 »

  1.   

    1.开5个task
    2.把任务放进队列
    3.线程函数先去队列里取任务,然后执行
      

  2.   

    当然这只是思路,会有很多细节的问题了
    比如
    1.到底用什么东西来当队列,是用Queue还是List,根据方式不同,数据结构也不一样
    2.如何避免多线程取到相同的任务?这样要加lock控制的
    3.任务是固定一次性添加进去的,还是有另一个线程动态添加的,这个过程也需要加lock
    4.当队列里没有任务了改怎么办,是5个线程空跑,还是先退出,留1个线程等任务,有任务了再动态开线程
      

  3.   

    既然知道Task,应该也知道Parallel啊。
      

  4.   

    同意楼上!假设你的“任务”的原型是 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();
    这就得到所有任务计算结果了。
      

  5.   

    设计普通顺序的计算算法,你学好Linq就行了。并发地查询计算,会写一个AsParallel()就行了。