Я новичок в потоке данных TPL и ищу конструкцию, которая позволит разделить список исходных сообщений для равномерно распределенной параллельной обработки при сохранении порядка сообщения сообщений через отдельные конвейеры. Есть ли в API DataFlow какой-то конкретный блок или концепция, которые можно использовать для достижения этой цели, или это больше вопрос предоставления связующего кода или пользовательских блоков между существующими блоками?
Для тех, кто знаком с 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);
}