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

15

往往当我在repl中使用core.async时,一个go块会跑飞,因为我丢失了用于停止它的通道,原因是我重新加载了命名空间。比如,如果我从repl中运行下面的代码:

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

我重新加载了命名空间,结果变量c丢失了。现在"hello"会一直出现在我的REPL中,除非我终止程序。如果我可以关闭所有通道或终止所有go块,那么就不用重启REPL了。

1个回答

9

据我所知,目前没有全局实现此功能的方法。一种技术是使用控制通道来关闭任何循环。 pub/sub 功能可能非常适用于全局控制通道。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接