Erlang gen_server cast 函数返回值有误

5

我试图将消息发送给一个gen_server:

 gen_server:cast({global, ID}, {watchers}).

处理程序是:
handle_cast({watchers}, State) ->
    case State#table_state.watchers of
    [] ->
        {reply, no_watchers, State};
    _ ->
        {reply, State#table_state.watchers, State}
    end;

但是当我执行gen_server:cast时,gen_server会因为错误而终止:
=ERROR REPORT==== 29-Apr-2011::18:26:07 ===
** Generic server 1 terminating 
** Last message in was {'$gen_cast',{watchers}}
** When Server state == {table_state,1,"1",11,[]}
** Reason for termination == 
** {bad_return_value,{reply, no_watchers, {table_state,3,"3",11,[]}}}

为什么我会收到“bad_return_value”?

3
顺便提一下,你不需要发送 {watchers} 这个元组内的原子,只需单独发送 watchers 原子作为消息即可。 - Adam Lindberg
1个回答

13

使用cast无法进行回复(请参阅gen_server文档)。这正是异步发送消息时使用cast的全部意义所在,而不是使用call。

在您的情况下,您想要返回一个答复,因此请改用gen_server:call/2


5
handle_cast 应该返回 {noreply,State}。对于需要返回一个值的同步调用,使用 gen_server:callhandle_call - rvirding

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接