我是TPL 数据流的新手,我正在寻找一种构造,它允许拆分源消息列表以进行均匀分布的并行处理,同时通过各个管道保持消息消息的顺序。DataFlow API 中是否有特定的块或概念可用于完成此任务,或者更多的是在现有块之间提供胶水代码或自定义块?
对于那些熟悉Akka.NET的人,我正在寻找类似于ConsistentHashing 路由器的功能,它允许将消息发送到单个路由器,然后将这些消息转发到要处理的单个路由。
同步示例:
var count = 100000;
var processingGroups = 5;
var source = Enumerable.Range(1, count);
// Distribute source elements consistently and evenly into a specified set of groups (ex. 5) so that.
var distributed = source.GroupBy(s => s % processingGroups);
// Within each of the 5 processing groups go through each item and add 1 to it
var transformed = distributed.Select(d => d.Select(i => i + 3).ToArray());
List<int[]> result = transformed.ToList();
Check.That(result.Count).IsEqualTo(processingGroups);
for (int i = 0; i < result.Count; i++)
{
var outputGroup = result[i];
var expectedRange = Enumerable.Range(i + 1, count/processingGroups).Select((e, index) => e + (index * (processingGroups - 1)) + 3);
Check.That(outputGroup).ContainsExactly(expectedRange);
}