当不再使用Clojure core.async通道时,是否应该关闭它们?

11

关闭方法(至少在Java世界中)是一种好公民的行为,当您完成使用相关资源时,您需要调用它。不知何故,我开始将同样的行为应用于core.async库中的close!函数。据我所知,这些通道与任何IO都没有关联,因此我不确定是否有必要调用close!。在本地范围内,将通道留给垃圾回收而不关闭它们是否可以接受?

1个回答

8

在你的程序中,如果关闭它们有意义,那么将它们留给垃圾收集器是可以的。通常,关闭它们是向其他组件发出信号,表示是时候关闭它们自己了。其他通道旨在永久使用,不需要关闭或垃圾回收。在另一些情况下,通道用于向消费者传递一个值,然后生产者和消费者都完成了,通道被垃圾回收。在这些最后的情况下,没有必要关闭它们。


不错的回答,只是一个例子。“when has meaning”可以在使用async/reduce时出现,这将需要在产生结果之前关闭输入通道。 - Andrea Richiardi
1
最常见的例子是core.async/timeout,它使用关闭通道来表示时间已经耗尽且没有产生任何值。通常在产生一个值或者不产生值的情况下会关闭通道。 - Arthur Ulfeldt

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