[英]How to make a Clojure go loop run forever
我想使用Clojure core.async來編寫一個循環輪詢服務的應用程序,但我的嘗試到目前為止意外終止。
當我運行這個程序時,它打印消息然后退出:
(defn -main
[]
(println "Running forever...?")
(async/go-loop [n 0]
(prn n)
(async/<!! (async/timeout 1000))
(recur (inc n))))
我希望程序永遠運行(直到JVM進程被終止)。
實現這一目標的可接受方式是什么?
主線程將保持JVM進程運行(它不關心go
池中的線程)。
通過阻塞主線程使其保持運行。 例如
(defn -main
[]
(println "Running forever...?")
(async/<!! (async/go-loop [n 0]
(prn n)
(async/<! (async/timeout 1000))
(recur (inc n)))))
注意:你不應該使用<!!
在一個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....
(或者你可以使用Long/MAX_VALUE
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.