我有一个表名列表(student、exam、school)。
我使用Parallel.ForEach
循环迭代表名,并对每个表进行处理,MaxDegreeOfParallelism = 8
。
我的问题是,我的Parallel.ForEach
并不总是进行工作窃取。例如,当剩下两个表需要处理时,它们可能会一个接一个地处理,而不是并行进行处理。我试图提高性能和增加吞吐量。
我尝试通过创建自定义TaskScheduler
来实现这一点,但是,对于我的实现,我需要按照最简单的任务顺序排列任务列表,以便它们不会被运行时间较长的表卡住。但我不能通过对传递给Parallel.ForEach
的列表 List< string > 进行排序来实现这一点,因为任务是由 TaskScheduler
无序入队的。因此,我需要一种方法,在我的CustomTaskScheduler中对任务列表进行排序,该任务调度程序基于https://psycodedeveloper.wordpress.com/2013/06/28/a-custom-taskscheduler-in-c/
如何控制Parallel.ForEach传递任务的顺序使其按顺序入队到TaskScheduler中?