分享您的想法,参与
2024 Clojure状态调查!

欢迎!请参阅关于页面以了解更多关于它是如何工作的信息。

0
参照,代理,原子

(def a (agent 0))

(dotimes [_ 100]
(send-off a inc))

如何确定100个动作都已经完成?

1 答案

+1

被选中
 
最佳答案

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

...