Josue,看看Java的Timers
https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/Timer.html
使用Clojure也可以有很多方法来做这件事:使用future、agents或者core.async。
将这个放入clojure.core会带来不必要的复杂性和维护成本。
还有一些设计选择,比如,它将在线程池上运行吗?它会等待任务终止后才开始计数超时吗?它可以阻塞吗?
根据您选择的哪组选项,将使得将该功能移植到其他(future)平台变得更加困难:javascript不支持阻塞,arduino没有系统时钟...
所以,您可以随心所欲地创建自己的josue.timer
API或使用一些已经存在的API
这里有一段使用java timers的代码
(let [every-5-sec (java.time.Duration/parse "PT5S")
ok-task (proxy [java.util.TimerTask] []
(run []
(prn :ok)))
;; save this return for later
timer-task (doto (java.util.Timer.)
(.schedule ok-task
(.toMillis every-5-sec)
(.toMillis every-5-sec)))]
#_(.cancel ok-task)
#_(.cancel timer-task)
timer-task)