使用TaskCreationOptions.LongRunning创建的线程数

时间:2016-04-07 13:14:54

标签: c# multithreading task-parallel-library

我已经使用TaskCreationOptions.LongRunning为后台进程创建任务,该任务从并发队列中读取请求并执行不同的操作。

task = Task.Factory.StartNew(x => PerformAction(), CancellationTokenObject, TaskCreationOptions.LongRunning);

我的理解是,这可能会创建一个单独的线程来调用“PerformAction()”,但当我对它进行分析时,它显示了 “System.Threading.ThreadHelper.ThreadStart”方法被多次调用。

每次调用“System.Threading.ThreadHelper.ThreadStart”时,这是否会创建一个新线程。在这种情况下,为TaskCreationOptions.LongRunning创建多个线程真的很奇怪。

1 个答案:

答案 0 :(得分:1)

首先请注意,TaskCreationOptions.LongRunning所做的事情没有记录,因此您不应该依赖它。 the documentation所说的是(强调我的):

  

它还为任务计划程序提供提示,该任务可能需要

现在,根据the reference source,默认TaskSchedulerLongRunning的作用是简单地启动一个新的背景Thread

ThreadHelper.ThreadStart在哪里进来?这是Thread的实现的一部分,并在线程启动时调用一次。看来its purpose is to make sure ExecutionContext is flowed

所以,我不知道你是如何得出TaskFactory.StartNew TaskCreationOptions.LongRunning多次调用ThreadHelper.ThreadStart的结论,但它不应该,至少不是默认的TaskScheduler