Asynchronous clojure core.async通道不再使用时是否应关闭?

Asynchronous clojure core.async通道不再使用时是否应关闭?,asynchronous,clojure,channel,core.async,Asynchronous,Clojure,Channel,Core.async,方法(至少在java世界中)是作为一个好公民在使用完相关资源后必须调用的。不知何故,我自动开始从core.async库为函数应用相同的函数。据我所知,这些与任何IO都不紧密,因此我不确定是否有必要调用close!。在不关闭通道(本地通道)的情况下为垃圾收集保留通道(本地通道)可以吗?除非关闭通道在您的程序中有意义,否则可以将其留给垃圾收集器。通常,关闭它们是向其他组件发出的信号,表示是时候自行关闭了。其他通道打算永远使用,永远不会关闭或收集垃圾。在其他情况下,渠道用于向消费者传递一个价值,然后生

方法(至少在java世界中)是作为一个好公民在使用完相关资源后必须调用的。不知何故,我自动开始从core.async库为函数应用相同的函数。据我所知,这些与任何IO都不紧密,因此我不确定是否有必要调用close!。在不关闭通道(本地通道)的情况下为垃圾收集保留通道(本地通道)可以吗?

除非关闭通道在您的程序中有意义,否则可以将其留给垃圾收集器。通常,关闭它们是向其他组件发出的信号,表示是时候自行关闭了。其他通道打算永远使用,永远不会关闭或收集垃圾。在其他情况下,渠道用于向消费者传递一个价值,然后生产者和消费者都完成了,渠道被GC'd。在最后一种情况下,没有必要关闭它们。

答案不错,只是一个例子。“when has means”可以是当您使用async/reduce时,这将需要一个关闭的输入通道才能生成某些内容。最常见的示例是core.async/timeout,它使用关闭通道来表示时间已用完且未生成任何值。通常,在产生一个值或代替一个值后关闭通道。