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 Process.send用法及代码示例
- Elixir Process.spawn用法及代码示例
- Elixir Process.send_after用法及代码示例
- Elixir Process.monitor用法及代码示例
- Elixir Process.demonitor用法及代码示例
- Elixir Process.delete用法及代码示例
- Elixir Process.whereis用法及代码示例
- Elixir Process.group_leader用法及代码示例
- Elixir Process.put用法及代码示例
- Elixir Process.registered用法及代码示例
- Elixir Process.register用法及代码示例
- Elixir Process.get用法及代码示例
- Elixir Process.exit用法及代码示例
- Elixir Process.unregister用法及代码示例
- Elixir Process.get_keys用法及代码示例
- Elixir Process.list用法及代码示例
- Elixir Protocol.extract_protocols用法及代码示例
- Elixir Protocol.consolidate用法及代码示例
- Elixir Protocol.derive用法及代码示例
- Elixir Protocol用法及代码示例
- Elixir Protocol.extract_impls用法及代码示例
- Elixir Path.basename用法及代码示例
- Elixir Path.rootname用法及代码示例
- Elixir Path.type用法及代码示例
- Elixir Path.split用法及代码示例
注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 Process.sleep(timeout)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。