当我从repl中使用core.async时,go块会经常离我远点,因为我因为重新加载了名称空间而失去了用于停止它的通道。例如,如果我从REPL运行:
(go (when (not= c (second (async/alts! [c (async/timeout 1000)])))
(println "hello")))
然后我重新加载名称空间,c丢失了。现在,我已经“嗨”向我的REPL发送垃圾邮件,直到结束为止。如果我可以关闭所有通道或杀死所有go块,则可以节省重新启动REPL的时间。
最佳答案
据我所知,没有办法在全球范围内进行此操作。一种技术是使用可用于关闭任何环路的控制通道。 pub/sub内容对于全局控制通道可能效果很好。