当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Elixir Process.sleep用法及代码示例


Elixir语言中 Process.sleep 相关用法介绍如下。

用法:

sleep(timeout)
@spec sleep(timeout()) :: :ok

休眠给定 timeout 的当前进程。

timeout 是以整数形式休眠的毫秒数或原子 :infinity 。当给定:infinity时,当前进程将永远休眠,不消费也不回复消息。

使用此函数时要格外小心。对于几乎所有在 Elixir 中使用 sleep/1 的情况,可能有一种更正确、更快和更精确的方式来实现消息传递。

例如,如果您正在等待某个进程执行某些操作,最好通过消息来传达此类操作的进度。

换句话说,不要:

Task.start_link(fn ->
  do_something()
  ...
end)

# Wait until work is done
Process.sleep(2000)

但是做:

parent = self()

Task.start_link(fn ->
  do_something()
  send(parent, :work_is_done)
  ...
end)

receive do
  :work_is_done -> :ok
after
  # Optional timeout
  30_000 -> :timeout
end

对于上述情况,首选 Task.async/1 Task.await/2

同样,如果您正在等待进程终止,请监视该进程而不是休眠。不要:

Task.start_link(fn ->
  ...
end)

# Wait until task terminates
Process.sleep(2000)

而是这样做:

{:ok, pid} =
  Task.start_link(fn ->
    ...
  end)

ref = Process.monitor(pid)

receive do
  {:DOWN, ^ref, _, _, _} -> :task_is_down
after
  # Optional timeout
  30_000 -> :timeout
end

相关用法


注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 Process.sleep(timeout)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。