我在代理和发送函数中遇到了一些非常奇怪的行为。我已将行为归结为少量代码。
这段代码:
(defn weird-behavior
[]
(let [my-agent (agent {:entries nil})]
(doseq [entry [1 2 3]]
(send my-agent assoc :entries (conj (@my-agent :entries) entry)))
(Thread/sleep 100) ;; Allow time for the sends to finish
(println my-agent)))
输出:
#<Agent@222e8b4: {:entries (3)}>
但是,如果我在每次调用之间给它 10 毫秒的发送时间,如下所示:
(defn weird-behavior
[]
(let [my-agent (agent {:entries nil})]
(doseq [entry [1 2 3]]
(send my-agent assoc :entries (conj (@my-agent :entries) entry))
(Thread/sleep 10)))
(Thread/sleep 100) ;; Allow time for the sends to finish
(println my-agent)))
输出如预期:
#<Agent@6211e63b: {:entries (3 2 1)}>
为什么会这样?如何将多个项目连续发送到代理?
谢谢。