私はTPL Dataflowを初めて使用し、個々のパイプラインを介してメッセージ メッセージの順序を維持しながら、均等に分散された並列処理のためにソース メッセージのリストを分割できる構造を探しています。これを達成するために使用できる 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);
}