【问题标题】:gRPC C++ async client completion queue draingRPC C++ 异步客户端完成队列耗尽
【发布时间】:2021-08-10 17:31:53
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c++ grpc


    【解决方案1】:

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

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

    您可以使用 TryCancel 快速终止通话

    【讨论】:

    • 谢谢!那确实奏效了。我的问题是我试图在从服务器读取无限流时关闭队列。在cq->Shutdown(); 之前调用context->TryCancel(); 使Next 非阻塞。
    猜你喜欢
    • 2020-02-18
    • 1970-01-01
    • 2020-03-08
    • 2018-01-11
    • 2021-02-14
    • 1970-01-01
    • 2018-08-01
    • 2020-03-29
    • 1970-01-01
    相关资源
    最近更新 更多