据微软(link),有两种方法来启动一个任务:隐和明确。任务并行(TPL)和任务调度在C#
假设我在主线程中创建了4个不同的任务,分别称为task1,task2,task3和task4。
案例1:我跑所有这些,明确在主线程:
task1.Start();
task2.Start();
task3.Start();
task4.Start();
案例2:我运行它们隐含使用Parallel.Invoke方法在主线程:
Parallel.Invoke(task1, task2, task3, task4);
的我注意到的唯一区别是在case2中,主线程暂停,直到Invoke()返回。
我的问题是关于任务调度程序。 在调度方面,它们在case1和case2中的行为有4个不同的任务吗?它们是完全等价的吗?
在我上面我们已经提到的相同链接阅读:
在后台,任务排队到线程池,这一直是 加强与算法(如爬山)决定和 调整最大化吞吐量的线程数量。这使得 任务相对轻量级,并且您可以创建其中的许多任务来启用细粒度并行。为了补充这一点,采用广为人知的工作窃取算法来提供负载平衡。
这是好奇还是你有一些代码依赖于这些信息? – Tudor 2012-02-08 15:50:35
是的。它出于好奇。我没有找到任何参考,所以我决定发布这个看看是否有人可以给我一个提示。 – ManiAm 2012-02-08 17:43:03