小编Nic*_*ick的帖子

Core.async <! 渠道僵局

当我期望 Alpha 表现得像 Beta 时,为什么它会提前停止?Alpha 和 Beta 之间的唯一区别是>!put!,如下所述。

Α:

user=> (def q (chan))
#'user/q
user=> (def counter (atom 0))
#'user/counter
user=> (defn mg [event-queue]
  #_=>      (go-loop [event (<! event-queue)]
  #_=>       (swap! counter inc)
  #_=>       (when (< @counter 4)
  #_=>         (println "counter: " @counter)
  #_=>         (>! event-queue {:a @counter})      ;; Here's the only difference
  #_=>         (println "event: " event)
  #_=>         (recur (<! event-queue)))))
#'user/mg
user=> (mg q)
#object[clojure.core.async.impl.channels.ManyToManyChannel 0x3a1ffd56 "clojure.core.async.impl.channels.ManyToManyChannel@3a1ffd56"]
user=> (put! q "hi")
counter:  true
1 …
Run Code Online (Sandbox Code Playgroud)

clojure clojurescript core.async

2
推荐指数
1
解决办法
358
查看次数

标签 统计

clojure ×1

clojurescript ×1

core.async ×1