你问什么是任务已经做了什么。 Task本质上是一个lambda的包装器,默认情况下会被排队等待在ThreadPool上执行。最重要的是,任务添加了延续,异常处理,取消和许多便利功能,使多线程更容易。
如果你不想使用线程池,你可以创建自己的TaskScheduler,并创建一个新的任务时使用它。 TaskScheduler本质上接收一个Task并安排它执行。
默认的TaskScheduler使用ThreadPool.QueueUserWorkItem加上一些盗窃魔法和多个队列处理。其他实现可以使用优先级队列,对线程的最大或最小数量或其作者想要使用的任何技术设置自己的限制。
编辑
我没有注意到便携式部分从一开始。所以问题是“PCL提供了使用ThreadPool的TaskScheduler还是我必须创建自己的”?
.NET 4+提供了ThreadPoolTaskScheduler。不幸的是,这似乎从PCL子集中丢失了。看起来您可能必须创建自己的TaskScheduler或使用Nuget包来添加平台特定的实现。
不知怎的,我觉得ThreadPoolTaskScheduler将是一个不错的选择对于一款Windows Phone项目
使用ReSharper的和.NET的调试符号一些diggind之后,我觉得PCL本身找到任何可用平台的TaskScheduler实现。
在.NET 4.0中,TaskScheduler.Default返回ThreadPoolTaskScheduler,一个INTERAL BCL类的一个实例。在PCL子集中,TaskScheduler.Default返回null,ThreadPoolTaskScheduler不可用。
为ThreadPoolTaskScheduler的源代码probalby可从微软的参考源服务器,但你也可以很快在dotnetframework.org
浏览它,我创建了一个返回一个新的任务PCL类,并把它称为从.NET 4.5的控制台应用程序来查看它将使用的TaskScheduler。我发现PCL类实际上使用了ThreadPoolTaskScheduler。
我还没有与Windows 8或Windows Phone 8的项目尝试这样呢,虽然我怀疑我会得到每个平台的默认的TaskScheduler。
我开始认为PCL为每个平台本身选择适当的TaskScheduler。检查我的答案的编辑,但我将不得不测试更多 –