Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使Clojure go循环永远运行_Clojure - Fatal编程技术网

如何使Clojure go循环永远运行

如何使Clojure go循环永远运行,clojure,Clojure,我想使用Clojure core.async编写一个位于轮询服务的循环中的应用程序,但到目前为止,我的尝试意外终止 当我运行此程序时,它会打印消息,然后退出: (defn -main [] (println "Running forever...?") (async/go-loop [n 0] (prn n) (async/<!! (async/timeout 1000)) (

我想使用Clojure core.async编写一个位于轮询服务的循环中的应用程序,但到目前为止,我的尝试意外终止

当我运行此程序时,它会打印消息,然后退出:

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