下面是一个简单的测试主管:在Elixir中,使用simple_one_for_one主管和start_child,如何在主管中设置孩子的ID?
defmodule SupervisorTest.Worker.Supervisor do
use Supervisor
def start_link do
Supervisor.start_link(__MODULE__, :ok, name: __MODULE__)
end
def start_worker(args) do
Supervisor.start_child(__MODULE__, [args])
end
def init(:ok) do
children = [
worker(SupervisorTest.Worker, [])
]
supervise(children, strategy: :simple_one_for_one)
end
end
这里是我的更简单的工人:
defmodule SupervisorTest.Worker do
use GenServer
def start_link(args) do
GenServer.start_link(__MODULE__, args)
end
def state(pid) do
GenServer.call(pid, :state)
end
def stop(pid) do
GenServer.stop(pid, :normal)
end
def handle_call(:state, _from, state) do
{:reply, state, state}
end
end
我非常希望能够调用Supervisor.which_children
与这名主管并取回名单子元组,其ID是生成的UUID。看起来我无法在init
worker
声明中设置它。并没有start_child/3
需要选项。我不能打电话start_child/2
与另一worker
声明的输出...所以我看不到任何方法来设置ID的东西...任何想法?
写下这段代码,当我打电话给Supervisor.which_children
时,每个子元组的第一个元素是:undefined
。