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