Skip to content

Instantly share code, notes, and snippets.

@alexander-yakushev
Created September 16, 2016 09:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alexander-yakushev/a03b1b6dd14c531cb6d00bd75d8519a8 to your computer and use it in GitHub Desktop.
Save alexander-yakushev/a03b1b6dd14c531cb6d00bd75d8519a8 to your computer and use it in GitHub Desktop.
(def c (a/chan 10 cat))
(go-loop [i 0]
(let [batch (range i (+ i 3))]
(when (>! c batch)
(println "Put succeeded:" batch)
(recur (+ i 3)))))
;; Put succeeded: (0 1 2)
;; Put succeeded: (3 4 5)
;; Put succeeded: (6 7 8)
;; Put succeeded: (9 10 11)
;; // Predictable so far. Buffer filled up to 12 items and the next put blocked.
(<!! c) ; => 0
;; Put succeeded: (12 13 14)
(<!! c) ; => 1
;; Put succeeded: (15 16 17)
(<!! c) ; => 2
;; Put succeeded: (18 19 20)
;; // What? The buffer keeps growing after each single take!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment