当前补丁文件: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))))