<!

added

ns
clojure.core.async

type
function

(<! port)

takes a val from port. Must be called inside a (go ...) block. Will
return nil if closed. Will park if nothing is available.

                user=> (def c (chan 1))
#'user/c

user=> (go-loop [data (<! c)]
         (println "Waited for => " data)
         (println "No recur. Won't print again"))

#<ManyToManyChannel clojure.core.async.impl.channels.ManyToManyChannel@6a3d3df4>

user=> (put! c "Example Async Data")

nil

Waited for =>  Example Async Data
No recur. Won't print again

user=> (put! c "Example Async Data")
nil

            
                ;; Clojure 1.7
user=> (let [c (chan 1 (filter pos?))]
 
         (go-loop []
           (let [nums (<! c)]
             (println nums))
           (recur))
   
         (doseq [n (range -10 10)]
           (put! c n)))
nil
1
2
3
4
5
6
7
8
9