2013-08-27 21 views
1

У меня есть пул серверов, который используется для загрузки баланса. Эта работа разделена на отдельные рабочие элементы, однако невозможно определить, сколько времени займет данный рабочий элемент.TaskScheduler Количество задач, которые еще нужно обработать

Каждый сервер использует TPL для планирования работы над рабочими элементами. Чтобы по-настоящему загрузить баланс, мне нужно определить, сколько из каждого сервера заработало рабочие элементы.

Все, что мне нужно - это получить количество запланированных рабочих элементов для TaskScheduler по умолчанию. В идеале я мог бы использовать TaskSchduler.GetScheduleTasks, но этот метод защищен.

Очевидным решением является создание собственного пользовательского планировщика и отображение количества запланированных задач. Это далеко не идеальное решение, так как все, что мне нужно, это число, и реально я не буду писать как хороший TaskScheduler как стандартный. Я не могу найти реализацию Планировщика задачи по умолчанию. Если бы я мог, может быть, я мог унаследовать его? Любые идеи, как я могу это решить?

ответ

0

Все что мне нужно - это получить количество запланированных рабочих элементов для TaskScheduler по умолчанию.

Просто добавьте счетчик, увеличьте его, когда запланирована новая задача, уменьшите его, когда задача будет завершена. Не забудьте использовать сделать его поточно-безопасным, например. используя Interlocked.Increment.

+0

Чтобы быть более конкретным, мне нужно отслеживать созданные задачи и проверять их [IsCompleted] (http://msdn.microsoft.com/en-us/library/system.threading.tasks.task.iscompleted.aspx) имущество. У меня нет другого способа узнать, когда закончилась фактическая (или любая) задача. –