2014-02-13 58 views
12

中的所有通道當我使用來自repl的core.async時,經常會出現一個去塊,因爲我鬆開了用於停止的通道這是因爲我重新加載了一個名稱空間。例如,如果我從repl運行這個:Clojure如何停止所有去塊或關閉core.async

(go (when (not= c (second (async/alts! [c (async/timeout 1000)]))) 
     (println "hello"))) 

然後我重新加載命名空間和c丟失。現在我有「你好」的垃圾郵件我的REPL直到時間的盡頭。如果我可以關閉所有通道或者殺死所有的塊,它可以節省我重新啓動REPL。

回答

8

我知道全球範圍內沒有辦法做到這一點。一種技術是使用可用於關閉任何迴路的控制通道。對於全球控制渠道來說,pub/sub的東西可能效果不錯。