【发布时间】:2014-01-17 11:06:48
【问题描述】:
假设我有一些来自 2 个不同来源的 2 个不同频率的数据,我必须将它们加入并一起处理。通道 A 的频率为 100Hz(每秒 100 个整数),而通道 B 的频率为 1Hz(每秒 1 个整数)。已使用 TPL 数据流中的 ActionBlock 在每个单独的通道上处理数据。但是现在,我必须一起处理它(一次来自 A 的 1000 个 int 和来自 B 的 5 个 int)。对我来说,解决方案是使用 BatchJoinBlock 加入这些块,等待来自通道 A 的 1000 条消息(1000 个整数)和来自通道 B 的 5 条消息(5 个整数)。填充批次后,将其触发到操作块并处理。
问题是 - 根据文档,BatchJoinBlock (MSDN) 将始终具有相同大小的所有批次。
我怎样才能绕过不同的尺寸?
作为替代方案,我可能可以创建 2 个不同大小的不同 BatchBlock 对象,然后将它们触发到 JoinBlock,后者又会将数据发送到 ActionBlock;但这似乎有点矫枉过正,还是一种常见的方法?
我没有发布任何代码,因为现在这些都是我正在考虑的纯理论方法,然后我开始实现两个不同通道的连接。如果需要,我可以快速敲出一些例子。
【问题讨论】:
-
我认为你的 2 个不同的 BatchBlock 想法是最好的选择。我没有什么要补充的。
标签: c# .net parallel-processing task-parallel-library tpl-dataflow