Clojure如何在core.async中停止所有go块或关闭所有通道

时间:2014-02-13 02:33:48

标签: clojure core.async

所有经常当我从repl使用core.async时,go块将离开我,因为我松开了用于停止它的通道,因为我重新加载了命名空间。例如,如果我从repl:

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

然后我重新加载命名空间而c丢失了。现在我已经“打招呼”了我的REPL垃圾邮件,直到时间结束。如果我可以关闭所有通道或杀死所有go块,它将节省我重新启动我的REPL。

1 个答案:

答案 0 :(得分:8)

我所知道的全球无法做到这一点。一种技术是使用可用于关闭任何循环的控制通道。 pub/sub内容可能适用于全局控制通道。