You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 02:18:03