我有一个thread.pool,如何让主线程等待所有任务完成?

时间:2018-08-03 08:03:45

标签: c# multithreading parallel-processing threadpool

嗨,我有下面的代码,我想知道如何让主线程等待线程池中的所有任务完成(我有动态数量的任务,并且最大分配了3个CPU内核)。例如:我有5个作业来运行thread_pool最多可以并行执行3个。

{        
     for(i=0;i<n;i++)
     {

         TaskParams tp = new TaskParams(some params to be parsed to thread job);

         ScanAllSectors objAllSectors = new ScanAllSectors();//object containing job function

         ThreadPool.QueueUserWorkItem(objAllSectors.vScan, tp);
     }
        //i want to block it here
    ...//some other functions that uses the result from the code above`
}

...所以这就是为什么我要在运行以下功能之前,阻塞main_thread直到线程池中的所有作业都完成。

谢谢!

1 个答案:

答案 0 :(得分:0)

Task Parallel Library (TPL)

的示例
Parallel.ForEach(
    ListOfStuff,
    new ParallelOptions { MaxDegreeOfParallelism = 4 },
    myStuffObj => DoAwesomeStuff(myStuffObj)
);

Console.WriteLine("All stuff done);

进一步阅读

Parallel.ForEach

ParallelOptions.MaxDegreeOfParallelism