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