await
正好是这样做的
(clojure.repl/doc await)
clojure.core/await ([& agents]) 在当前线程(无限期!)阻止,直到迄今为止从这个线程或代理分发的所有动作都已对代理(们)发生。将在失败的代理上阻塞。如果失败的代理以:clear-actions true重启或调用shutdown-agents,则永远不会返回。
要尝试它
(def a (agent 0)) (dotimes [_ 100] (send-off a (fn [x] (Thread/sleep 30) (inc x)))) (await a)
(将会阻塞几秒钟)