如何使Clojure go循环永远运行
我想使用Clojure core.async编写一个位于轮询服务的循环中的应用程序,但到目前为止,我的尝试意外终止 当我运行此程序时,它会打印消息,然后退出:如何使Clojure go循环永远运行,clojure,Clojure,我想使用Clojure core.async编写一个位于轮询服务的循环中的应用程序,但到目前为止,我的尝试意外终止 当我运行此程序时,它会打印消息,然后退出: (defn -main [] (println "Running forever...?") (async/go-loop [n 0] (prn n) (async/<!! (async/timeout 1000)) (
(defn -main
[]
(println "Running forever...?")
(async/go-loop [n 0]
(prn n)
(async/<!! (async/timeout 1000))
(recur (inc n))))
(defn-main
[]
(打印“永远运行…?”)
(异步/去循环[n 0]
(prn)
(异步/
我希望程序永远运行(直到JVM进程终止)
实现这一点的公认方法是什么?主线程将保持JVM进程运行(它不关心go
池中的线程)
通过阻塞主线程使其保持运行
(defn -main
[]
(println "Running forever...?")
(async/<!! (async/go-loop [n 0]
(prn n)
(async/<! (async/timeout 1000))
(recur (inc n)))))
(defn-main
[]
(打印“永远运行…?”)
(异步/
注意:您不应该在go
块中使用。您应该使用有多少种方法可以阻止主线程
(defn -main []
(println "Running forever...?")
; go-loop runs forever in another (daemon) thread
(async/go-loop [n 0]
(prn n)
(async/<!! (async/timeout 1000))
(recur (inc n))
; hang the main thread
(Thread/sleep 111222333444)) ; long enough....
(defn-main[]
(打印“永远运行…?”)
;go循环在另一个(守护进程)线程中永远运行
(异步/去循环[n 0]
(prn)
(异步/
(或者你可以使用Long/MAX_VALUE
)。正是我需要的,谢谢!如果go block退出,它甚至可以很好地退出。blast!是你创建了“year 5592-03-22T22:38:16.661Z”bug!历史会记住这一点!事实上,1110亿毫秒
的持续时间只有3.5年左右(没有我最初猜测的那么长!)但是,可能足够长的时间持续JVM重启。long/MAX\u VALUE
但是,将创建“年份292469208 bug”((>long/MAX\u VALUE(/1000 60 24 365)(-2000)int)
)