我正在安装GenServer,我很困惑。
我知道handle_cast
是异步的,这意味着调用方没有等待答复,我们返回了一个类似{:noreply, new_state}
的元组。
我注意到我们也可以从handle_call
返回相同的元组。这是否意味着如果我有一个返回handle_call
的{{1}},它什么也不会返回,而是会同步的?调用方的流将等待{:noreply, new_state}
命令,然后在GenServer.call
函数完成后继续吗?
答案 0 :(得分:5)
呼叫者将阻止等待您调用GenServer.call的回复whenever
。 handle_call
接受{:noreply, state}
作为有效回报的原因是允许您手动({在任何地方)reply/2。
调用过程将阻止等待reply
(并根据您的设置等而超时)。
handle_callback
的第二个参数是from
的引用,如handle_call(msg, from, state)
,然后可以与reply/2
一起使用。