簡體   English   中英

如何使Clojure go循環永遠運行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM