【发布时间】:2014-07-09 21:02:59
【问题描述】:
我有一些非常独立的任务,我使用期货分拆出来。这些任务通过 core.async/chan 将某些事件传回主应用程序,或者只是与 db 通信。
其中一些未来正在悄然失败。我的日志或 std{out,err} 上没有堆栈跟踪。我试过用
包围期货调用的 fns 中的代码(try (do-stuff)
(catch Exception e
(log/error e))
只是为了在我的日志中获得一些输出,但是——令人惊讶的是!——没有用。
我唯一的选择是启动另一个循环执行以下操作的线程吗?
(let [m (Thread/getAllStackTraces)]
(doseq [e (.entrySet m)]
(log/error (.toString (.getKey e)))
(doseq [s (.getValue e)]
(log/error " " (.toString s)))))
这是表明我根本不应该使用期货的症状吗?我是否应该使用代理,即使不需要向这些代理发送任何消息?
【问题讨论】:
-
我对 core.async 不熟悉,所以我无法评论您在该库中使用期货的适当性。但是如果未来由于异常而失败,那么取消对未来的引用应该重新抛出异常。
标签: concurrency clojure