Elixir 为什么进程ID返回为未定义?
我有Supervisor及其子Genserver,代码如下:Elixir 为什么进程ID返回为未定义?,elixir,Elixir,我有Supervisor及其子Genserver,代码如下: defmodule MyApp.StatisticSupervisor do use DynamicSupervisor def start_link(_) do DynamicSupervisor.start_link(__MODULE__, [], name: {:global, __MODULE__}) end def start_statistic(team_id) do DynamicSu
defmodule MyApp.StatisticSupervisor do
use DynamicSupervisor
def start_link(_) do
DynamicSupervisor.start_link(__MODULE__, [], name: {:global, __MODULE__})
end
def start_statistic(team_id) do
DynamicSupervisor.start_child(global_name(), {MyApp.Statistic.Server, [team_id]})
end
def init(_) do
DynamicSupervisor.init(strategy: :one_for_one)
end
end
defmodule MyApp.Statistic.Server do
def child_spec(team_id) do
%{
id: team_id,
start: {__MODULE__, :start_link, [team_id]},
restart: :transient
}
end
def start_link(team_id) do
GenServer.start_link(__MODULE__, %{team: team_id}, name: via_tuple(team_id))
end
def init(state) do
{:ok, state}
end
defp via_tuple(team_id) do
{:via, :syn, {:team, team_id}}
end
end
代码是正确的。然后,我使用以下命令启动genserver:
MyApp.StatisticSupervisor.start_statistic(1)
>
{:ok, #PID<0.973.0>}
命令正在返回:
[
{:undefined, #PID<0.973.0>, :worker, [MyApp.Statistic.Server]}
]
[
{:未定义,#PID,:worker,[MyApp.Statistic.Server]}
]
我很困惑。为什么ID返回未定义而不是1
我希望我能回来:
[
{1, #PID<0.973.0>, :worker, [MyApp.Statistic.Server]}
]
[
{1,#PID,:worker,[MyApp.Statistic.Server]}
]
它与数字、原子或模块无关。标识符总是返回未定义的
是长生不老药的毛病吗?我找到了解决办法
我找到了解决办法
[
{1, #PID<0.973.0>, :worker, [MyApp.Statistic.Server]}
]
id - it is always :undefined for dynamic supervisors