你問什麼是任務已經做了什麼。 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。檢查我的答案的編輯,但我將不得不測試更多 –