当前补丁文件:0002-ASYNC-126-Add-public-channel-closed-predicate.patch
在 clojure.core.async 中添加一个公开函数 {{closed?}},用于确定通道是否关闭,而不需要放入或取出任何值。
这是一个围绕 {{clojure.core.async.impl.protocols/closed?}} 的简单包装器。
仍然存在 {{closed?}} 和 {{close!}} 之间的竞争条件。正确的代码永远不应该依赖于 {{closed?}} 来检查通道是否 *打开*。{{closed?}} 谓词应仅用于避免为已关闭的通道产生额外值的额外工作。
h2. 用例示例
生产者进程可以在进行生产下一个值的工作之前检查通道是否 {{closed?}}
(thread
(loop []
(when-not (closed? ch)
(>!! ch (do-expensive-work))
(recur))))