当父进程死亡时,进程 send_link 不起作用,即使在取消链接后也是如此

问题描述 投票:0回答:1

我有

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)
它没有用。

erlang elixir
1个回答
0
投票

如流程模块中所述docs

如果给定的目的地是PID,定时器将自动取消 它不存在或当给定的 PID 退出时。

this = self()

self/1
是一个函数,它返回一些东西 - 它不是对变量的引用,变量在某些其他语言中改变值,例如javascript。因此,当您在函数参数的位置调用
self/1
时,函数无法执行,直到
self/1
返回。因此,将
self/1
的返回值赋给一个变量,例如
this
,什么都不做。

© www.soinside.com 2019 - 2024. All rights reserved.