TaskCreationOptions.LongRunning选项和ThreadPool

Kav*_*ian 24 c# scheduled-tasks .net-4.0 threadpool task-parallel-library

TPL使用任务计划程序来协调任务.根据官方文档,默认任务调度程序使用线程池,但如果显示TaskCreationOptions.LongRunning选项,则它将为该任务创建专用线程(A).

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

Mau*_*Mau 36

是的,LongRunning强制在池外创建新线程.这是来自最新框架版本的一些伪反汇编代码:

...
if (task.Options HasFlag LongRunning) then
    create new Thread thread
    thread.Start(task)
...
Run Code Online (Sandbox Code Playgroud)

编辑:从丑陋的C#转换为伪代码.

  • @chibacity:还有"合理使用"这样的概念,即使原始版本可能完全合法.但我认为我们都不是[美国]版权法的专家. (8认同)
  • 对于Fx本身来说,反射是一种公认​​的做法.但危险在于:未来版本可能会发生变化. (7认同)
  • @Chibacity好问题是如何实现的.最终的文档页面应该说明这里所说的内容.另外,您会发现这不是实际的源代码,因为没有人会像这样编写if条件.无论如何,将答案改为伪代码. (5认同)

Tim*_*oyd 14

大概你可以通过使用"Thread.IsThreadPoolThread"来检查这个:

http://msdn.microsoft.com/en-us/library/system.threading.thread.isthreadpoolthread.aspx

  • @Henk优秀 - 所以当使用"LongRunning","Thread.IsThreadPoolThread = false"时.干杯. (4认同)