C#任务是否在一个核心上运行?

C#任务是否在一个核心上运行?

我有一个项目,我需要决定要创建多少个任务。 我需要创建尽可能多的计算机。 这是处理器,核心或逻辑处理器的数量,我在三个选项之间感到困惑。

任务在线程上执行。 操作系统将线程调度到核心。 核心是一个逻辑概念,与物理CPU芯片不同。

创建Environment.ProcessorCount任务,或者更好地使用更高级别的TPL结构之一,如PLINQ或Parallel

如果您使用任务库(PTL),则无需担心这一点。 你可以在这里阅读更多相关信息。 简而言之:

TPL动态地扩展并发度,以最有效地使用所有可用的处理器。 另外,TPL处理工作的分区……

我们在Task周围创建了一个包装器,如下所示:

 public static class PeriodicTaskFactory { public static Task Start(Action action, int intervalInMilliseconds = -1, int delayInMilliseconds = 0, int duration = -1, int maxIterations = -1, bool synchronous = false, CancellationToken cancelToken = null, TaskCreationOptions periodicTaskCreationOptions = TaskCreationOptions.None); } 

然后我们这样称呼它。 在这种情况下,我们要执行的唯一工作是每1分钟调用一个方法,第一次执行时延迟1秒。

  PeriodicTaskFactory.Start(() => { CdClMappingLogic.Invoke(); }, 60000, 1000, -1, -1, true)