2024年Clojure调查问卷!中分享你的想法。

欢迎!请参阅关于页面以了解有关如何使用此功能的一些更多信息。

0
Refs, agents, atoms

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

...