我有
Process.send_after(self(), {:do_thing, type, x, z, 0}, 60_000)
然后如果父进程死了那永远不会发生 所以我试了
{:ok, pid} =
Task.start_link(fn ->
Process.send_after(self(), {:do_thing, type, x, z, 0}, 60_000)
end)
Process.unlink(pid)
但这仍然没有解决它。我该怎么办。
我也试过了
this = self()
然后 Process.send_after(this, {:do_thing, type, x, z, 0}, 60_000)
它没有用。
如流程模块中所述docs:
如果给定的目的地是PID,定时器将自动取消 它不存在或当给定的 PID 退出时。
this = self()
self/1
是一个函数,它返回一些东西 - 它不是对变量的引用,变量在某些其他语言中改变值,例如javascript。因此,当您在函数参数的位置调用 self/1
时,函数无法执行,直到 self/1
返回。因此,将 self/1
的返回值赋给一个变量,例如this
,什么都不做。