use*_*545 3 clojure clojurescript core.async
我正在玩core.async并发现它非常有趣.但是,我无法理解多播和广播的不同用例.它们是否需要或者是否会被另一个取代?到目前为止,我发现的唯一区别是,使用mult更容易点击和取消.不确定如何取消订阅广播,这是唯一的区别吗?
下面我有一个示例,说明如何使用这两种方法解决问题.
;; Using mult with tap
(def in (chan))
(def multiple (mult in))
(def out-1 (chan))
(tap multiple out-1)
(def out-2 (chan))
(tap multiple out-2)
(go (>! in "PutIN"))
(go (prn "From out-1: " (<! out-1)))
(go (prn "From out-2: " (<! out-2)))
Run Code Online (Sandbox Code Playgroud)
//
;; Using broadcast
(def bout-1 (chan))
(def bout-2 (chan))
(def broadcast-in (broadcast bout-1 bout-2))
(go (>! broadcast-in "PutINBroadcast"))
(go (prn "From bout-1: " (<! bout-1)))
(go (prn "From bout-2: " (<! bout-2)))
Run Code Online (Sandbox Code Playgroud)
这是clojure.core.async.lab命名空间的注释broadcast.
core.async高度实验性的特征探索
注意事项:
此命名空间中定义的所有内容都是实验性的,并且可以在不发出警告的情
此命名空间提供的许多功能都与core.async的实现细节高度耦合.在更高抽象级别操作的潜在特征适合包含在示例中.
此命名空间提供的功能可能会在以后的某个时间点提升为clojure.core.async,但不能保证它们中的任何一个.
很长一段时间没有人研究它,它从未被移植到ClojureScript.我希望它在不久的将来会从core.async中删除.mult是后来的发展.
| 归档时间: |
|
| 查看次数: |
721 次 |
| 最近记录: |