1

一部の作業の負荷分散に使用されるサーバーのプールがあります。この作業は個別の作業項目に分割されていますが、特定の作業項目にかかる時間を決定することは不可能です。

各サーバーは、TPL を使用して作業項目の作業をスケジュールします。作業を真に負荷分散するには、各サーバーに保留中の作業項目がどれだけあるかを判断できる必要があります。

必要なのは、既定の TaskScheduler のスケジュールされた作業項目の数を取得することだけです。理想的にはTaskSchduler.GetScheduleTasksを使用できますが、このメソッドは保護されています。

明らかな解決策は、独自のカスタム スケジューラを作成し、スケジュールされたタスクの数を公開することです。私が必要とするのはこの数だけであり、現実的には、デフォルトのものほど優れた TaskScheduler を作成しないため、これは理想的なソリューションとはほど遠いものです。デフォルト タスク スケジューラの実装が見つかりません。できれば、それを継承できますか?これを解決する方法はありますか?

4

1 に答える 1

0

必要なのは、既定の TaskScheduler のスケジュールされた作業項目の数を取得することだけです。

カウンターを追加し、新しいタスクがスケジュールされたときにインクリメントし、タスクが終了したときにデクリメントするだけです。Interlocked.Incrementなどを使用して、スレッドセーフにすることを忘れないでください。

于 2013-08-27T09:08:41.653 に答える