我正在玩线程安全文件写入,但我不知道为什么这段代码没有记录到文件中(基于代理部分:http ://blakesmith.me/2012/05/25/understanding -clojure-concurrency-part-2.html )
代码运行了所有正确的功能,但文件仍然是空的。我认为这是因为文件关闭没有以某种方式发生,但即使取消期货以强制关闭最后作为测试似乎也无济于事。
(defn write-out [out msg]
(.write out msg)
out)
(defn log [logger msg]
(send logger write-out msg))
(defn close [logger]
(send logger #(.close %)))
(defn go []
(let [ofile (agent (clojure.java.io/writer "/tmp/log.test.txt" :append true))]
(dotimes [x 10]
(future (log ofile (str "Log A " x "\n"))))
(close ofile)
(shutdown-agents)))
小红利问题:链接的帖子从未真正解释为什么我需要在写出结束时返回文件写入器指针。我知道你需要它,但我不知道为什么。