画像圧縮サービスにタスクライブラリを使用しています。多くのファイルの同時実行性を圧縮します。しかし、私はユーザーがアイドル状態のとき(またはプログラムでこれ以上重要なタスクがないとき)にのみサービスを実行したいと思っています。
threadPoolは「スレッド優先度の変更」機能をサポートしていないことを知っているので、タスクもこの機能をサポートしています。
その機能をより高いレベルの制御で開発できますか?(たとえば、TaskSchedulerの優先順位)
画像圧縮サービスにタスクライブラリを使用しています。多くのファイルの同時実行性を圧縮します。しかし、私はユーザーがアイドル状態のとき(またはプログラムでこれ以上重要なタスクがないとき)にのみサービスを実行したいと思っています。
threadPoolは「スレッド優先度の変更」機能をサポートしていないことを知っているので、タスクもこの機能をサポートしています。
その機能をより高いレベルの制御で開発できますか?(たとえば、TaskSchedulerの優先順位)
@zengr が述べたように、優先キュー パターンを使用してこの問題を解決できます。実際、MSDNConcurrentQueue<T>
には、優先度ごとにインスタンスを使用して優先度キューをIProducerConsumerCollection<T>
実装し、それを優先度の高いキューから優先度の低いキューの前にアイテムをプルするカスタム実装でラップする良いサンプルがあります。このタイプの実装により、プロデューサーは必要な優先度の数を決定し、アイテムが追加されたときに優先度を割り当てることができ、コンシューマーは優先度アルゴリズムを理解する必要なく、優先度が最も高いアイテムを最初に処理できます。
Task Parallel ライブラリのカスタムを作成し、そのインスタンスをコンストラクターTaskScheduler
に渡すことでタスクをスケジュールできます。TaskFactory
これを行う方法の一例を次に示します。優先順位付きのタスク スケジューラ