2010-11-01 58 views
5

我使用任務庫爲我的圖像壓縮服務。我會壓縮許多文件併發性。但是我希望服務只在用戶空閒時運行(或者在程序中沒有更多不重要的任務)。如何添加任務優先功能

我知道threadPool不支持「更改線程優先級」功能,所以任務也支持此功能。

我能制定控制的更高水平的功能呢?(的TaskScheduler優先級爲例)

+0

實現優先級隊列 – zengr 2010-11-01 09:57:32

+0

zengr你能否澄清你對此有何評論? – Ivan 2010-11-01 10:03:57

回答

4

正如@zengr提到的,你可以使用一個優先級隊列模式來解決這個問題。實際上有a good sample in MSDN實施優先級隊列,每個優先級使用ConcurrentQueue<T>實例,然後用自定義IProducerConsumerCollection<T>實現包裝實現,該實現從較高優先級隊列中取下較低優先級隊列中的項目。這種類型的實現使您的生產者可以確定應該有多少優先級,在添加項目時分配優先級,讓消費者先處理優先級最高的項目,而不必理解優先級算法。

2

您可以爲任務並行庫創建自定義TaskScheduler,然後通過將任務的實例傳遞給構造函數TaskFactory來安排任務。

下面是如何做到這一點了一個例子:Task Scheduler with priority