目前,我正在并行调用一系列动作(数组数据来自数据库调用)。完成所有操作后,将重建阵列并调用新累积的操作。问题是在尾端长时间运行会导致整个过程花费太长时间。
理想情况下,当阵列清空操作时,它会在运行中重建,以便最多可以一次运行最大数量的操作。我希望有一种方法可以通过检查动作数组计数并通过动态调用子程序来重建Parallel.Foreach
。这是我现在使用的代码:
Parallel.Invoke(new ParallelOptions() { MaxDegreeOfParallelism = 5 }, actionsArray);
有关如何以我描述的方式(或其他方法)使用Parallel.Foreach
的任何提示?这段代码似乎与我想要的很接近,但是我的技能超出了它的适应范围:
public static void ParallelWhileNotEmpty<T>(
IEnumerable<T> initialValues,
Action<T, Action<T>> body)
{
var from = new ConcurrentQueue<T>(initialValues);
while (!from.IsEmpty)
{
var to = new ConcurrentQueue<T>();
Action<T> addMethod = to.Enqueue;
Parallel.ForEach(from, v => body(v, addMethod));
from = to;
}
}