【发布时间】:2013-05-09 03:47:59
【问题描述】:
给定一个函数:
%% @doc Retrieves client's state.
-spec(state(pid()) -> atom()).
state(Pid) when is_pid(Pid) ->
case process_info(Pid) of
undefined ->
undefined;
_Else ->
Pid ! {state, self()},
receive
{state, State} ->
State
after
1000 ->
undefined
end
end.
对于死掉的 pid 和活着的客户端,它可以正常工作:
> client:state(A).
undefined
> client:state(Pid).
online
但是如果进程 Pid 在 1 秒内没有回复他的状态,则由于某种原因返回 Pid:
> client:state(self()).
<0.172.0>
我期待那里有“未定义”的原子。 如何修复此代码?
【问题讨论】:
-
你为什么期待
undefined在这里?process_info为self()返回一些数据,不是未定义的,然后你将{state, self()}发送到self()并接收它。
标签: erlang