调用gen_server:从Mod:handle_cast转换

jur*_*uro 4 erlang erlang-otp

这是我的代码:

handle_cast(start, #state{started = false} = State) ->
    gen_server:cast(self(), add_process),
    {noreply, State#state{started = true}};
handle_cast(add_process, State) -> ...
Run Code Online (Sandbox Code Playgroud)

gen_server:castinsinde handle_cast函数可以打电话吗?我期望它做的是handle_cast返回一个新状态然后add_process立即处理消息.

leg*_*cia 7

这是正确的,除了消息可能不会"立即"处理 - 它被放在消息队列中,并且将首先处理队列中消息之前的消息.

正如您可能已经想到的那样,这适用于gen_server:cast和使用!但不会发送的消息gen_server:call,这会导致死锁.