Did you mean
*(go (loop [ ... ]* * (case ...* * .. (func arg1 foo1)* * .. (func arg2 foo2)* * .. (func arg3 foo3)))* *where (defn func [ ... ] (.. >! .. ))* , as func (not foo) is the thing in function position? Ignoring that, and working in a general sense: I think that if the function you call into is synchronous, then you can just <! or >! from within the go block, and call the function in the normal fashion. However, if the function is asynchronous, I think it is probably best to make the function itself into a go machine, and just take! on the returned channel returned from the go machine. something like (defn func [...] (go <DO ASYNC_STUFF._LAST_VALUE_IS_VALUE_OF_CHANNEL_RETURNED_BY_FN_CALL> )) calling it as ... (<! (func arg1 foo1)). ... Performance wise, I am not clear how expensive it is to spin up a go machine every time you make a call to func vs just passing around a channel to be processed by a looping go machine. -- -- 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.