Elixir GenServer handle_call回调返回类型

时间:2018-10-23 12:41:35

标签: elixir gen-server

我正在安装GenServer,我很困惑。

我知道handle_cast是异步的,这意味着调用方没有等待答复,我们返回了一个类似{:noreply, new_state}的元组。

我注意到我们也可以从handle_call返回相同的元组。这是否意味着如果我有一个返回handle_call的{​​{1}},它什么也不会返回,而是会同步的?调用方的流将等待{:noreply, new_state}命令,然后在GenServer.call函数完成后继续吗?

1 个答案:

答案 0 :(得分:5)

呼叫者将阻止等待您调用GenServer.call的回复wheneverhandle_call接受{:noreply, state}作为有效回报的原因是允许您手动({在任何地方)reply/2

调用过程将阻止等待reply(并根据您的设置等而超时)。

handle_callback的第二个参数是from的引用,如handle_call(msg, from, state),然后可以与reply/2一起使用。