我有一个服务器池,用于负载平衡一些工作。这项工作在离散的工作项中进行划分,但是无法确定给定工作项将花费多少时间。
每台服务器都使用TPL来安排工作项的工作。 为了真正实现工作的负载平衡,我需要能够确定每个服务器有多少待处理的工作项。
我只需要获取默认TaskScheduler的预定工作项数。理想情况下,我可以使用TaskSchduler.GetScheduleTasks,但此方法受到保护。
一个明显的解决方案是编写自己的自定义计划程序并公开计划任务的数量。这远非理想的解决方案,因为我需要的只是这个数字而且实际上我不会像默认的那样编写好的TaskScheduler。 我找不到默认任务调度程序的实现。如果我可以,也许我可以继承它? 我有什么想法可以解决这个问题吗?
答案 0 :(得分:0)
我只需要获取默认TaskScheduler的预定工作项数。
只需添加一个计数器,在计划新任务时递增计数器,在任务完成时递减计数器。不要忘记使用它使线程安全,例如使用Interlocked.Increment 。