grpc库是否支持阻止来自完成队列的n个事件的完成状态?

时间:2020-10-24 18:58:30

标签: c++ grpc

我们并行发出多个异步请求,每个请求都有一个唯一的标记。我们希望阻止并等待所有这些事件成功完成,失败或超时。

我们可以通过计算未完成的呼叫总数,并在每次从队列中弹出事件时将运行中的总数减少1来实现此目的。我真的不喜欢这样。

  1. 这需要根据每个调用实例化完成队列(这会产生大量开销),或者我们需要重用一个队列,但要确保给定队列中只有1个活动用户时间。这意味着对于m个线程进行n次调用,我们需要m个队列(每个服务n次调用)。

  2. 我们在假设没有其他事件来自队列的情况下进行递减。我不知道这是否可以保证。

     int inFlight = 10; // e.g. with dummy data
    
     while(cq->Next(&tag, &ok) {
         inFlight--;
         if (inFlight == 0)
             break;
         /// process...
     }
    

是否有一种方法可以阻止并等待库支持的n个标记的异步事件完成?

在对队列进行多路复用时是否可以阻止并等待这些事件?

1 个答案:

答案 0 :(得分:0)

gRPC 没有支持您的案例的机制。完成队列是一个处理异步操作的低级组件,所以它主要作为一个简单的队列工作。因此,您可能必须管理自己的簿记方式。 ClientInterceptor 可能有助于在不同的 rpc 中执行相同的操作。