Parallel.ForEach
,使其能够与“显式并行性”一起工作。这意味着它不能保证您的委托将在多个线程中运行,而是检查主机平台是否有多个核心,如果是,则仅在核心之间分配工作(基本上每个核心1个线程)。如果主机系统没有多个核心(越来越难找到这样的计算机),则会像“普通”的for each循环一样按顺序运行代码。相当酷的东西。
通常,我会执行以下操作,将我的长时间运行的操作放在来自
ThreadPool
的后台线程上:ThreadPool.QueueUserWorkItem(new WaitCallback(targetMethod), new Object2PassIn() );
在主机计算机只有一个核心的情况下,TPL的
Parallel.ForEach
是否会自动将调用放在后台线程上?或者,我应该手动从后台线程调用任何TPL调用,这样如果我在单核计算机上执行,至少该逻辑将脱离GUI的分派线程?我的担忧是,如果我让TPL负责所有这些工作,我希望确保如果它确定这是单核盒子,它仍然将在后台线程中编写
Parallel.ForEach
循环内的代码,就像我所做的那样,以不阻止我的GUI。