Я пытаюсь запустить указанных ниже сотрудников в Supervisor, который я вызываю в модуле приложения в mix.exs
Примерно так:
defmodule AppStarter do
import Supervisor.Spec
def start(_type,_args) do
children=[
worker(TPMod1,[],[]),
worker(TPMod2,[],[])
]
opts=[strategy: :one_for_one, name: HelloVisor]
Supervisor.start_link(children,opts)
end
end
Один из моих модулей - GenServer, а другой -Я держал простой процесс прослушивания.
defmodule TPMod1 do
def start_link() do
IO.puts "started TPMod1"
listen()
end
def listen() do
receive do
_ -> :ok
end
listen()
end
def child_spec(opts) do
%{
id: __MODULE__,
start: {__MODULE__, :start_link, []},
type: :worker,
restart: :permanent,
shutdown: 500
}
end
end
Проблема в том, что он застревает и не запускает работника 2 TPMod2
Я пытался сделать это в TPMod1
* start_link()
def start_link() do
IO.puts "started TPMod1"
Task.async(&listen/0)
end
Но это дает мнеthis
** (Mix) Не удалось запустить приложение tproject: AppStarter.start (: normal, []) вернул ошибку: shutdown: не удалось запустить child: TPMod1 ** (EXIT)% Task{owner: #PID <0.143.0>, pid: #PID <0.144.0>, ref: #Reference <0.2187290957.3420192769.212288>}
Я могу сделать его GenServer и заставить его работать, нокак мы можем начать простой работник?И почему супервизор не перезапускает его снова?не бесконечно, а несколько раз?Это должно было по крайней мере попытаться перезапустить и потерпеть неудачу.Пожалуйста, предложите другие улучшения, если таковые имеются.