下面是一個簡單的測試主管:在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
。