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)
(将阻塞几秒钟)