4

这是我的代码:

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

gen_server:cast从函数内部调用handle_cast可以吗?我期望它handle_cast会返回一个新状态,然后add_process立即处理消息。

4

1 回答 1

7

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

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

于 2012-12-18T18:15:02.827 回答