【发布时间】:2017-03-20 19:13:09
【问题描述】:
我正在尝试在事务中send-off 函数println。
(ns com.lapots.functional.clojure.transact
(:gen-class))
(defn transfer [from to amount]
(alter
(.balance from) - amount)
(alter
(.balance from) + amount))
(defrecord Account [balance])
(defn -main [& args]
(def account1 (Account. (ref 100)))
(def account2 (Account. (ref 100)))
(def trx-agent (agent 0))
(future
(dosync
(send-off trx-agent println "T2 transfer")
(Thread/sleep 5000)
(transfer account1 account2 10)))
(dosync
(println "T1 transfer")
(transfer account1 account2 10))
(shutdown-agents)
)
如果我喜欢这个
(println "T2 transfer")
(Thread/sleep 5000)
它在事务重试时显示两次消息。所以我决定使用agents让副作用操作println只运行一次。
但是当我这样做时
(send-off trx-agent println "T2 transfer")
它根本不打印T2 transfer 消息。有什么问题?
【问题讨论】: