2024 年 Clojure 状态调查!中分享您的想法。

欢迎!请在关于页面获取有关该功能如何工作的更多信息。

0
Clojure

报警功能

简单描述

报警功能是一个功能,每隔一段时间调用一个函数。


用法

(defn function
  "This function will be called every 1 minute 10 times"
  []
  (println "Hello, world!"))

 (defn -main 
  ""
  [& args]
  (alarm 1 10 function))

简单用例

当用户创建账户且未确认邮箱时,通过报警验证用户是否真的未确认。

1 个回答

+1

Josue,看看java计时器
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或使用一些现成的

以下是一个使用java计时器的代码示例

(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)
...