Jos*_*h.F 5 clojure core.async
我刚刚注意到,该pipeline家族返回了一个channel看似完全独立于管道目的的操作及其相关渠道.
在下面的例子中,你可以看到>! / <!来自pipes与a> / b>独立,以及他们无关.
据我了解,pipelineS的关系是一个空操作,并返回nil在设置sideffecting transduc从灰a>到b>.
那么,我错过了什么,为什么要pipeline回来channel?
(def a> (chan))
(def b> (chan))
(def pipes (pipeline-blocking 4
b>
(map clojure.string/upper-case)
a>))
(go (>! pipes "hello world"))
(go (println "Pipes: " (<! pipes)))
(go (>! a> "apples are gooood"))
(go (println "B: " (<! b>)))
Run Code Online (Sandbox Code Playgroud)
当没有更多要复制的元素时,您将返回一个已关闭的通道.也就是说,在a>关闭之后,它的所有元素都被制成大写并放在上面b>.您可以<!从生成的通道中找出流水线操作何时完成,如果您在意,或者您可以丢弃该通道.你可能不应该写它.
这是许多异步操作的常见模式,实际上经常会隐式发生:每个go块返回一个通道,当块完成时,该通道会将块的返回值写入其中,并且许多异步操作使用go块作为其返回值,因此结果,你自动获得这个"完成工作"的渠道.
| 归档时间: |
|
| 查看次数: |
475 次 |
| 最近记录: |