我是core.async新手,我想知道为什么下面的代码不能工作(根本没有输出):
(def jackie (chan 2))
(go (loop [food (<! jackie)]
(if food
(do
(println "Some" food "is what I was waiting for.")
(Thread/sleep 1000)
(recur (<! jackie))))))
(go (doseq [food ["carrots" "peas"]]
(println "deliver" food)
(>! jackie food)
(Thread/sleep 1000)))..。虽然这确实起作用了:
(def jackie (chan 2))
(go (loop [food (<! jackie)]
(if food
(do
(println "Some" food "is what I was waiting for.")
(Thread/sleep 1000)
(recur (<! jackie))))))
(doseq [food ["carrots" "peas"]]
(println "deliver" food)
(>!! jackie food)
(Thread/sleep 1000))这里唯一的区别是缺少了最后一个doseq周围的go块。
我在this blog post中的一个示例中找到了组合的go和doseq,但它不适用于我。同样,反过来做,像in this question一样将go嵌套在doseq中对我不起作用。
发布于 2014-12-23 19:40:30
如果目标通道/缓冲区已满,>!!将阻塞当前线程。要让当前的go块停靠,请使用single-bang变体>!
https://stackoverflow.com/questions/27619185
复制相似问题