【发布时间】:2016-05-27 09:06:36
【问题描述】:
{:ok, tas} = Task.Supervisor.start_link(restart: :transient, max_restarts: 4)
a = 1
Task.Supervisor.async_nolink(tas, fn -> IO.puts "#{a}..." end)
Task.Supervisor.async_nolink(tas, fn ->
IO.puts "Not Restarting :( "
1 = 2
end)
a = a + 1
Task.Supervisor.async_nolink(tas, fn -> IO.puts "#{a}.." end)
a = a + 1
Task.Supervisor.async_nolink(tas, fn -> IO.puts "#{a}.." end)
restart: :transient 选项似乎没有任何作用。
我有几个任务Task.async(fn(x) -> fetch_info(x) end 发出http 请求以获取多个资源,并且有超时错误。最好重试那些失败的任务,而不是使用try、rescue。
我认为async_nolink 是我得到的最接近的,不会导致进程崩溃。如果无法使用Task,我们是否有更简单的方法使用Supervisor,它启动多个进程,一旦它们的工作完成就存在并在它们失败时重新启动它们?
【问题讨论】:
标签: elixir erlang-otp