This took me a few minutes to figure out, but it's a race condition in your code. There are two things attempting to read from the channel, and one attempting to write. This means sometimes the "hello" put into the channel will be read out right away by the alts!!. If the handler is sleeping, then this will happen every time.
Instead of using a single channel, have the handler accept a in channel and an out channel. Then put "hello" into the input and alts!! will take from the output. Also, (put! c "hello") is exactly like (go (>! c "hello")) but it is much faster. Timothy Baldridge On Tue, Nov 19, 2013 at 9:58 PM, bob <wee....@gmail.com> wrote: > I write a test to produce it,just run the fact several times quickly, and > we can see that (println "3" v (java.util.Date.) only be executed one time. > > (defn handler [c] > (go > (let [] > (loop [] > (when-let [v (<! c)] > (println "2" (java.util.Date.)) > (Thread/sleep 4000) > (println "3" v (java.util.Date.)) > (recur)) > (println "existing..."))))) > > (def c (chan)) > (handler c) > > (fact "test timeout" > (let [] > (println "1" (java.util.Date.)) > (go (>! c "hello")) > (alts!! [c (timeout 3000)]) > (println "4" (java.util.Date.)) > "" > => nil?)) > > -- > -- > 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/groups/opt_out. > -- “One of the main causes of the fall of the Roman Empire was that–lacking zero–they had no way to indicate successful termination of their C programs.” (Robert Firth) -- -- 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/groups/opt_out.