send-off
ファンクションprintln
取引中です。クロージャー送り出し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
を1回だけ実行することにしました。
しかし、私はこの
(send-off trx-agent println "T2 transfer")
のように行うときには全くT2 transfer
のメッセージを印刷しません。何が問題ですか?
ああ、私はそれを得る。基本的に 'println transfer'を呼び出す前に私は10秒待っています(トランザクションは再試行されました)が、コミットされるまでにエージェントはシャットダウンされます – lapots