core.async に関するこの記事を読んで、 < ! ! goブロックが最後のチャンネルを返すまでメインスレッドをブロックするために使用されます。元の例では、 < ! ! goブロックは内側(doseq...)ですが、外側に出してもOKですか?彼らは同じように振る舞うように見えます。
;;original example code
(let [c (chan)]
(doseq [i (range 10)]
(go
(Thread/sleep 1000)
(>! c i)))
(doseq [_ (range 10)]
(<!!
(go
(println (<! c))))))
;;putting <!! part outside doseq
(let [c (chan)]
(doseq [i (range 10)]
(go
(Thread/sleep 1000)
(>! c i)))
(<!!
(go
(doseq [_ (range 10)]
(println (<! c))))))