我不应该直接打电话给 gen_server:stop() 吗?
Should I not call gen_server:stop() directly?
在 LYSE 书中,作者按如下方式处理服务器的终止:
%% Synchronous call
close_shop(Pid) -> gen_server:call(Pid, terminate).
handle_call(terminate, _From, Cats) ->
{stop, normal, ok, Cats}.
terminate(normal, Cats) ->
[io:format("~p was set free.~n",[C#cat.name]) || C <- Cats],
ok.
所以它 returns 来自 handle_call
回调的 stop
值。
我是这样写的:
close_shop(Pid) -> gen_server:stop(Pid).
terminate(_Reason, {Cats, Money}) ->
io:format("Made $~w~n", [Money]),
[io:format("~p was set free.~n",[C#cat.name]) || C <- Cats].
直接调用 gen_server:stop()
这不是一个好习惯吗?
直接调用 gen_server:stop/1,3
并不是一个坏习惯。它做的事情与 LYSE 中的示例几乎相同,但没有从您的模块中调用 handle_call/3
。尝试检查一下。你甚至可以阅读源代码来确定。
在 LYSE 书中,作者按如下方式处理服务器的终止:
%% Synchronous call
close_shop(Pid) -> gen_server:call(Pid, terminate).
handle_call(terminate, _From, Cats) ->
{stop, normal, ok, Cats}.
terminate(normal, Cats) ->
[io:format("~p was set free.~n",[C#cat.name]) || C <- Cats],
ok.
所以它 returns 来自 handle_call
回调的 stop
值。
我是这样写的:
close_shop(Pid) -> gen_server:stop(Pid).
terminate(_Reason, {Cats, Money}) ->
io:format("Made $~w~n", [Money]),
[io:format("~p was set free.~n",[C#cat.name]) || C <- Cats].
直接调用 gen_server:stop()
这不是一个好习惯吗?
直接调用 gen_server:stop/1,3
并不是一个坏习惯。它做的事情与 LYSE 中的示例几乎相同,但没有从您的模块中调用 handle_call/3
。尝试检查一下。你甚至可以阅读源代码来确定。