當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。