一直在努力缠绕我的脑袋,并希望有人能指出我正确的方向。
我跑了mix new my_other_app --sup
并得到了波纹管应用程序:
defmodule MyOtherApp do
def start_link do
Task.start_link(fn -> loop() end)
end
def loop do
IO.puts "running..."
:timer.sleep(1000)
loop()
end
end
我的申请主管:
defmodule MyOtherApp.Application do
use Application
def start(_type, _args) do
import Supervisor.Spec, warn: false
children = [
worker(MyOtherApp, [])
]
opts = [strategy: :one_for_one, name: MyOtherApp.Supervisor]
Supervisor.start_link(children, opts)
end
end
并混合application/0
def application do
[extra_applications: [:logger],
mod: {MyOtherApp.Application, []}]
end
现在我的问题是:
mix app.start
时,应用程序会立即运行并停止运行?mix app.start
而不是mix run
?mix run --no-halt
让应用程序继续运行,但为什么呢?为什么如果我删除主管并在我的loop/0
底部拨打my_other_app.ex
,它会继续与mix run
一起运行,但是对于主管,它不会?感谢您的帮助!
答案 0 :(得分:1)
这个问题似乎与我在未受监督的任务流程中调用loop/0
函数的方式有关。
非常简单,但写这篇文章的过程帮助我实现了目标;)
感谢橡皮鸭,SO;)
编辑:当我开始mix run
vs mix app.start
由于