2011-03-08 53 views
4

如何強制TPL使用固定數量的線程?我知道MaxDegreeOfParallelism可以用來設置上限,但我希望上限等於下限。這可能嗎?怎麼樣?因爲我知道有人會問=)是的,我確信我想這樣做,是的,它是我的scneario的最佳選擇。 =)TPL - 我如何強制TPL使用固定的線程數?不少於

編輯
該解決方案需要自定義分區程序以及的TaskScheduler http://social.msdn.microsoft.com/Forums/en-US/parallelextensions/thread/002ff888-6e13-4d7e-a234-1632e8a1f551

回答

6

如果您真的需要,您可以創建自己的TaskScheduler,但使用TaskCreationOptions.LongRunning可能是最好的方法。

How to: Create a Task Scheduler That Limits the Degree of Concurrency

+0

謝謝!......看着LongRunning。將回報。 – SFun28 2011-03-09 02:49:37

+0

在解決如何將LongRunning與Parallel.ForEach結合使用時遇到問題。有什麼建議麼? – SFun28 2011-03-09 03:19:07

+0

你在我的編輯鏈接中提出的鏈接可以做到這一點。 – SFun28 2011-03-11 20:05:04

4

您是否嘗試過在創建任務時使用TaskCreationOptions.LongRunning自定義?這只是一個提示,但我相信它可能有所幫助:

指定任務將是一個長時間運行的粗粒度操作。它向TaskScheduler提供了可能需要超額認購的提示。

這是可能的,這將超額認購其超越,當然 MaxDegreeOfParallelism ...你應該嘗試尋找這也解釋得很詳細的資源。順便提一下,你是如何創建你的任務的?

+0

嗨喬恩 - 好建議!我會深入研究它是否會超額訂閱。我正在通過Parallel.ForEach創建我的任務 – SFun28 2011-03-09 02:49:14

+0

發佈了對@BrandonAGr的評論 - 無法弄清楚如何將LongRunning與Parallel.ForEach一起使用。有什麼建議麼? – SFun28 2011-03-09 03:19:38

+0

@ SFun28:嗯 - 看起來你不能在那裏指定任務創建選項。既可以自己創建任務,也可以考慮編寫自己的任務調度程序。 – 2011-03-09 06:24:40