I would like to block the thread until an agent has done its thing - in this case serving as a cap on a timer. I had thought that wrapping a call to the timed-agent function with await would do just that, but apparently not. At least in the repl, the function returns immediately and you can follow along as the agent updates until it's finished.
(defn timed-agent [limit f] (let [a (agent 0) t (java.util.Timer.) tt (proxy [java.util.TimerTask] [] (run [] (send-off a (fn[v] (f) (inc v)))))] (set-validator! a #(> limit %)) (.scheduleAtFixedRate t tt 1000 1000) a)) For example user> (await (timed-agent 20 #(println "running"))) nil user> (returns immediately and 20 "running" strings will be printed) user> (def a (timed-agent 20 #(println "running"))) #'user/a user> @a <whatever the value of a is at the time> Clearly I'm misunderstanding await + agents (not surprising - clojure is fairly new to me). Can someone clarify how await works and how one should block a thread for a timed task where you want a limit to the number of times it runs? thank you -- 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