Sometimes the obvious is too obvious - call timed-agent and then Thread/sleep while the timer of known duration runs. One further question however, is there any significant difference between calling the timed-agent worker function in send-off or in add-watch? For my needs, the task that runs does not depend on the value of the agent - the agent is just a convenient way to limit the timer.
On Nov 1, 4:29 pm, AndyK <andy.kri...@gmail.com> wrote: > After a bit more digging - Timer is a background thread so clearly > that's not going to mesh well as a foreground blocking activity with > agent (which is what I get for plugging along one path and trying to > bring in another path without thinking things through). But the > question remains - any ideas for using Timer while blocking the > current thread? Is a future a better choice here? > > On Nov 1, 4:19 pm, AndyK <andy.kri...@gmail.com> wrote: > > > > > > > > > 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