我们并行发出多个异步请求,每个请求都有一个唯一的标记。我们希望阻止并等待所有这些事件成功完成,失败或超时。
我们可以通过计算未完成的呼叫总数,并在每次从队列中弹出事件时将运行中的总数减少1来实现此目的。我真的不喜欢这样。
这需要根据每个调用实例化完成队列(这会产生大量开销),或者我们需要重用一个队列,但要确保给定队列中只有1个活动用户时间。这意味着对于m个线程进行n次调用,我们需要m个队列(每个服务n次调用)。
我们在假设没有其他事件来自队列的情况下进行递减。我不知道这是否可以保证。
int inFlight = 10; // e.g. with dummy data
while(cq->Next(&tag, &ok) {
inFlight--;
if (inFlight == 0)
break;
/// process...
}
是否有一种方法可以阻止并等待库支持的n个标记的异步事件完成?
在对队列进行多路复用时是否可以阻止并等待这些事件?
答案 0 :(得分:0)
gRPC 没有支持您的案例的机制。完成队列是一个处理异步操作的低级组件,所以它主要作为一个简单的队列工作。因此,您可能必须管理自己的簿记方式。 ClientInterceptor
可能有助于在不同的 rpc 中执行相同的操作。