微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

我们可以通过计算未完成的呼叫总数,并在每次从队列中弹出事件时将运行中的总数减少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个标记的异步事件完成?

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

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。