首页 > 解决方案 > gRPC C++ 异步客户端完成队列耗尽

问题描述

我创建了一个用 C++ 编写的 gRPC 异步客户端,它使用完成队列向服务器发出流式请求和一元请求。

在客户端类的析构函数中Shutdown调用了完成队列的方法,然后我想我可以调用Next来排空队列并获取待处理的标签,但是调用 to 会Next阻塞所有内容。

需要挂起的标签,因为它们是创建的对象new,必须删除以避免泄漏。

排空用于异步客户端的队列的正确方法是什么?

标签: c++grpc

解决方案


应该是 1 个标签进入完成队列,1 个标签出来,所以所有待处理的操作都会从 Next 返回它们的标签(即使 RPC 被取消)。

Next 阻塞的症状可能是由于有未完成的未决事件。

您可能想使用 TryCancel 快速终止通话


推荐阅读