我正试图围绕代理商呼叫代理商时发生的事情。
(def top (agent 0))
(def bottom (agent 1))
我有一对最小的一对:
(defn testA []
"This returns 'top', whose value is 'bottom', whose value is 2."
(send top (fn [top-value]
(send bottom inc)))
(await top)
top)
(defn testB []
"This never terminates."
(send top (fn [top-value]
(send bottom inc)
(await bottom) ;;<- this is new
bottom))
(await top)
top)
内心等待发生了什么?当一个代理人打电话给另一个时,有什么因素可以发挥作用?
谢谢,
答案 0 :(得分:2)
简短的回答是,您无法在座席操作中使用await
。您可以使用(agent-error top)
对于更长的答案(解释为什么你不能这样做),你将不得不(a)等待一些clojure大师:)我的看法是,你可以引入死锁或其他一些灾难。
另请注意,使用top
或bottom
会返回代理本身,而不是其值。要获得该值,您需要(deref top)
或@top
。