2010-06-23 175 views
23

TPL使用任务计划程序来协调任务。根据official document,默认任务调度程序使用线程池,但如果显示​​选项,则它将为该任务创建一个专用线程(A)。TaskCreationOptions.LongRunning选项和ThreadPool

问题:截至目前,Visual Studio 2010的MSDN文档尚未就绪,当前在线MSDN尚未最终确定;有谁知道(A)是真是假?

+0

您能否提供(A)的具体来源? – 2010-06-23 23:20:30

+0

这是这个标题上的一个有趣的文字:http://download.microsoft.com/download/B/C/F/BCFD4868-1354-45E3-B71B-B851CD78733D/TPLOptionsTour.pdf – 2010-06-26 21:11:51

回答

36

是,LongRunning强制池外的新线程的创建。下面是最新的framework版本的一些伪反汇编代码:

... 
if (task.Options HasFlag LongRunning) then 
    create new Thread thread 
    thread.Start(task) 
... 

编辑:从丑陋的C#转换为伪。

+7

反射是Fx本身的一种公认的做法。但危险在于:未来的版本可能会改变。 – 2010-06-23 23:06:09

+1

@chiba:我没有看到毛的问题。我认为看到反汇编很有帮助。亨克也是+1。由于调度程序逻辑可能会更改,因此不能保证位于其自己的线程上。 – 2010-06-23 23:11:25

+1

@Scott我认为你会发现理论上这个代码被反汇编的库的所有者可以发布[take-down notice](http://en.wikipedia.org/wiki/Online_Copyright_Infringement_Liability_Limitation_Act#Takedown_example)到托管它的网站 - 它的版权侵犯。所以这通常不是很好的做法。我正在考虑良好的行为,所以在这里。 – 2010-06-23 23:16:01