当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


erlang receive_response(RequestId, Timeout)用法及代码示例


receive_response(RequestId, Timeout) -> Result
OTP 23.0
类型:
RequestId = request_id()
Timeout = timeout_time()
Result = term()

收到回复call调用进程先前使用的请求send_request/4.RequestId应该是之前创建的返回值send_request/4调用,并且相应的响应不应已被接收并处理完成receive_response(),check_response/4, 或者wait_response/4.

Timeout设置等待响应的时间上限。如果操作超时,则由以下标识的请求RequestId将被放弃,然后{erpc, timeout} error将引发异常。也就是说,超时后将不会收到与请求相对应的响应。如果收到响应,则call操作完成并返回结果或引发异常。可以引发的异常对应于可以引发的异常call/5.receive_response/2将会失败{erpc, badarg}如果/当无效时例外RequestId被检测到或者如果无效Timeout已通过。

对函数的调用my_call(Node, Module, Function, Args, Timeout)下面相当于调用erpc:call(Node, Module, Function, Args, Timeout)如果一个人忽视了绩效。call()可以利用选择性接收优化,无需从头开始扫描消息队列以查找匹配的消息。这send_request()/receive_response()然而,组合不能利用这种优化。

my_call(Node, Module, Function, Args, Timeout) ->
  RequestId = erpc:send_request(Node, Module, Function, Args),
  erpc:receive_response(RequestId, Timeout).

如果 erpc 操作失败,但不知道该函数是否/将被应用(即超时或连接丢失),则调用者将不会收到有关结果的任何进一步信息(如果/当应用该函数时)完成。如果应用函数显式地与调用进程通信,那么这种通信当然可以到达调用进程。

相关用法


注:本文由纯净天空筛选整理自erlang.org大神的英文原创作品 receive_response(RequestId, Timeout) -> Result。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。