我有一个班级CallerA
和一个班级CalleeB
。
类CalleeB
具有队列并异步完成作业。
例如,如果CalleeB
具有函数enqueue(int input)
和CallerA
调用CalleeB.enqueue(1)
和CalleeB.enqueue(11)
,则输入11的结果可以比输入1更早返回。
现在,CallerA
创建了10个CalleeB
个实例。
CallerA
将从1到5个增量到随机CalleeB
实例输入,从6到10增量到随机CalleeB
个实例,从11到15输入,依此类推。
CallerA
将等待回调以接收来自CalleeB
个实例的结果,如果收到所有1~5个结果,CallerA
将会执行某些操作。此外,如果收到CallerA
收到6到10,CallerA
会做一些事情。
当然,输入1和6可能会转到相同的 CalleeB
实例,并且6早于1返回。
是否有一种有效的技术来实现CallerA
的计数结果{1}}?
答案 0 :(得分:0)
是否有一种有效的技术来实现CallerA计数结果 来自CalleeB?
当然,CallerA只需要跟踪他收到的结果,这样当他收到所有5个结果时,他就可以对他们采取行动。
我这样做的方法是让CallerA维持unordered_map<int, Result>
,并且每当从CalleeB收到结果时,将其放入unordered_map,然后检查该集合的其他4个结果也存在于unordered_map中;如果是这样,请从unordered_map中删除它们并处理它们。
或者,您可以保留一个包含5项子结果数组的10项数组,并将每个结果放入相应子数组中的相应插槽(slotIdx = i%5)中(arrayIdx = i / 5在将结果放入适当的子数组后,您可以检查子数组的插槽以查看它们是否全部填充,或者您可以增加特定于该子数组的计数器,当计数器达到5时,阵列必须已满。