c++ - gRPC C++ 异步客户端完成队列耗尽
问题描述
我创建了一个用 C++ 编写的 gRPC 异步客户端,它使用完成队列向服务器发出流式请求和一元请求。
在客户端类的析构函数中Shutdown
调用了完成队列的方法,然后我想我可以调用Next
来排空队列并获取待处理的标签,但是调用 to 会Next
阻塞所有内容。
需要挂起的标签,因为它们是创建的对象new
,必须删除以避免泄漏。
排空用于异步客户端的队列的正确方法是什么?
解决方案
应该是 1 个标签进入完成队列,1 个标签出来,所以所有待处理的操作都会从 Next 返回它们的标签(即使 RPC 被取消)。
Next 阻塞的症状可能是由于有未完成的未决事件。
您可能想使用 TryCancel 快速终止通话
推荐阅读
- python - iven 一列找到与指定列的最高相关变量
- scala - Scala存在类型奇怪的行为
- powershell - 如果第一个通过,如何在 Windows Powershell 中按第二个执行顺序运行多个命令?
- git - 如何将大型虚幻引擎 4 项目上传到 GitHub?
- html - 轮廓按钮到图像轮廓
- javascript - 从前端调用 Node/Axios
- python - 如何将打印空心钻石的代码转换为实心钻石?
- javascript - 如何防止 material-ui/pickers 中的下划线和斜线符号?
- javascript - IE 11 的选项组问题
- css - Chrome 在移动视图上的滚动条位置问题