Hi Tim, Thanks for the explanations; clearly there's a lot to think about here! But I think Futures provide what I'm looking for. I don't know if having Agents be cancel-able in general is a good idea or not; the "Java Concurrency" page suggests not.
-Stuart Sierra On Feb 1, 6:59 pm, Timothy Pratley <timothyprat...@gmail.com> wrote: > Hi Stuart, > > > One option would be to use a second agent as a flag. My really-long- > > action function could periodically check the value of that agent, and > > terminate if it's been set to true. But would it be possible to > > provide a generic interrupt mechanism that doesn't require modifying > > the action function? > > Futures have a cancel method which *attempts* to cancel a task. My > understanding is that this is a pretty good way to cancel most tasks, > but does not cover all cases (Non-interruptible Blocking). Here is an > example of how you might take advantage of > that:http://github.com/timothypratley/strive/blob/d21fb78ddf00e8e79dd4a27e... > When I watch my CPU usage this behaves as I would expect it (ie: > canceling the task correctly). > > I believeAgentscould be adjusted in a similar fashion with > reasonable ease, by replacing execute with submit and holding a > reference to it as the currently running task. Alternatively just > implementing the same cancellation strategy as futures (ie: raise an > interrupt on the current Action, which would catch interrupts and > return). I'm happy to submit a patch to that effect given some > guidance on which if either is a good strategy. > > > My use-case is a REPL-like utility that can run each expression the > > user types in a separate thread, and cankilloff threads that are > > misbehaving or not terminating. > > If you want to cover Non-interruptible Blocking then some additional > techniques are > required:http://book.javanb.com/java-concurrency-in-Practice/ch07lev1sec1.html > It seems to me that canceling a thread in Java is quite a topic! So > apologies if my suggestion is too trivial or misses the point. > > Regards, > Tim. --~--~---------~--~----~------------~-------~--~----~ 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 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 -~----------~----~----~----~------~----~------~--~---