Elixir是否自带原生send_interval间隔定时函数?
Elixir 标准库的Process模块确实没有封装和Erlang :timer.send_interval/2,3 对标的间隔定时发送消息函数,你直接调用:timer.send_interval即可,这属于Elixir的常规合法用法,不存在兼容性问题。
几个需要明确的点:
- Elixir 运行在Erlang VM之上,所有OTP标准库提供的函数(包括
:timer模块的所有接口)都属于Elixir可直接调用的原生能力范畴,不需要引入任何第三方依赖,也不属于非标准的hack调用。 - Elixir 原生
Process模块仅封装了单次延迟发送的Process.send_after/4,没有内置重复间隔发送的封装。你当然可以基于send_after递归实现间隔发送逻辑,但官方实现的:timer.send_interval经过了几十年的生产环境验证,稳定性和性能都有保障,绝大多数场景下直接使用即可,没必要重复造轮子。 :timer.send_interval调用成功后会返回定时器引用,不需要继续发送时直接调用:timer.cancel/1传入该引用即可终止定时任务。
基础使用示例:
# 每隔1000ms向当前进程发送:tick消息 {:ok, timer_ref} = :timer.send_interval(1000, :tick) receive do :tick -> IO.puts("收到定时消息") end # 不需要时取消定时器 :timer.cancel(timer_ref)
注意:如果是在GenServer等OTP进程内使用间隔定时器,进程退出前记得主动取消定时器,避免无效定时器消息泄漏。
内容的提问来源于stack exchange,提问作者Chen Yu
相关产品推荐
相关产品推荐

