How to make a Clojure go loop run forever
我想使用Clojure core.async编写一个位于轮询服务的循环中的应用程序,但是到目前为止,我的尝试都意外终止。
当我运行此程序时,它会打印消息,然后退出:
1 2 3 4 5 6 7 | (defn -main [] (println"Running forever...?") (async/go-loop [n 0] (prn n) (async/<!! (async/timeout 1000)) (recur (inc n)))) |
我希望程序永远运行(直到JVM进程被杀死)。
达成此目标的公认方法是什么?
主线程将保持JVM进程的运行(它不会关心
通过在主线程上阻塞来使其运行。例如
1 2 3 4 5 6 7 | (defn -main [] (println"Running forever...?") (async/<!! (async/go-loop [n 0] (prn n) (async/<! (async/timeout 1000)) (recur (inc n))))) |
注意:您不应在
有多少种方法可以阻塞主线程……?
1 2 3 4 5 6 7 8 9 10 11 | (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.... |
(或者您可以使用