如何使Clojure go循环永远运行

Ale*_*lex 2 clojure

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

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

(defn -main
  []
  (println "Running forever...?")
  (async/go-loop [n 0]
                 (prn n)
                 (async/<!! (async/timeout 1000))
                 (recur (inc n))))
Run Code Online (Sandbox Code Playgroud)

我希望程序永远运行(直到JVM进程被终止).

实现这一目标的可接受方式是什么?

Ale*_* C. 7

主线程将保持JVM进程运行(它不关心go池中的线程).

通过阻塞主线程使其保持运行.例如

(defn -main
  []
  (println "Running forever...?")
  (async/<!! (async/go-loop [n 0]
                 (prn n)
                 (async/<! (async/timeout 1000))
                 (recur (inc n)))))
Run Code Online (Sandbox Code Playgroud)

注意:您不应该<!!go块内使用.你应该改用<!.