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:castinsinde関数から呼び出しても大丈夫handle_castですか?私が期待しているのはhandle_cast、新しい状態が返され、add_processメッセージがすぐに処理されることです。

4

1 に答える 1

7

メッセージが「すぐに」処理されない可能性があることを除いて、これは正しいです。メッセージはメッセージキューに入れられ、キューに入る前のメッセージが最初に処理されます。

おそらくすでに理解しているように、これは、gen_server:castを使用して送信されたメッセージに適用されます!が、ではなくgen_server:call、ここでデッドロックが発生します。

于 2012-12-18T18:15:02.827 に答える