我正在尝试使用core.async,并发现它非常有趣。然而,我不太理解mult和broadcast的不同用例。它们都是必需的吗?还是其中一个会被另一个替代?
到目前为止,我唯一发现的区别是使用mult更容易进行tap-in和untag。不确定如何从broadcast中取消订阅,这是唯一的区别吗?
下面是一个示例,展示了如何使用这两种方法来解决问题。
;; 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)))
//
;; 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)))