gRPC:ClientAsyncStreamingInterface.Finish()和CompleitionQueue的作用

时间:2018-11-07 20:30:38

标签: grpc

我试图从gRPC greeter_async_client.cc的helloworld示例中了解docs

关于第76行: rpc->Finish(&reply, &status, (void*)1);

api reference提到ClientAsyncStreamingInterface::Finish()函数将在以下情况下返回:

  

该函数将在以下任一情况下返回:

     
      
  • 已读取所有传入消息,并且服务器已返回状态。
  •   
  • 服务器已返回非正常状态。
  •   
  • 由于某种原因调用失败,并且磁带库生成了状态。
  •   

这是否意味着Finish()正在阻止?如果是的话,CompletionQueue的作用是什么。 Finish()调用返回后,我们能否立即读取响应?

1 个答案:

答案 0 :(得分:0)

该文档不正确且已过时。请参考最新文档。简而言之,Finish()不会阻塞,并且总是立即返回。 “此函数将返回”应替换为“标签将被返回”。