Hello, I'm trying to process messages from 2 core.async channels at the same time using alts!! but I'm running into problems when one of the channels closes early. Specifically I have this function:
(defn >print [a b] (loop [limit 20] ;;limit to prevent infinite loop demonstrated below (let [[v c] (alts!! [a b] :default ::done)] (if (and (not= c :default) (> limit 0)) (do (if (= c a) (println "a:" v) (println "b:" v)) (recur (dec limit)))))) nil) If I run this, it works as expected: (let [a (chan 10) b (chan 10)] (>!! a 1) (>!! a 1) (>!! a 1) (>!! a 1) (>!! b 2) (>!! b 2) (>!! b 2) (>!! b 2) (>!! b 2) (>print a b)) Output: b: 2 a: 1 a: 1 b: 2 b: 2 a: 1 b: 2 b: 2 a: 1 If I close "a" early... (let [a (chan 10) b (chan 10)] (>!! a 1) (close! a) (>!! a 1) (>!! a 1) (>!! a 1) (>!! b 2) (>!! b 2) (>!! b 2) (>!! b 2) (>!! b 2) (>print a b)) This is what I get: a: 1 b: 2 b: 2 b: 2 a: nil a: nil b: 2 b: 2 a: nil a: nil a: nil a: nil a: nil a: nil a: nil a: nil a: nil a: nil a: nil a: nil This code would continue running forever if it wasn't for the "limit" condition above. Am I using alts!! in a manner it's not meant to be used? Thanks, Stathis -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.