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)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。