我有几个相当独立的任务,我使用 futures 将它们拆分。这些任务通过 core.async/chan 与主应用程序通信,或者只是与数据库交互。
现在有一些这些 futures 在默默地失败。我的日志中没有堆栈跟踪信息,也没有在 std{out,err} 上看到任何信息。我尝试过将 futures 调用的函数代码包围在...中。
现在有一些这些 futures 在默默地失败。我的日志中没有堆栈跟踪信息,也没有在 std{out,err} 上看到任何信息。我尝试过将 futures 调用的函数代码包围在...中。
(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)))))
这是一个症状,表明我根本不应该使用futures吗?即使不需要给这些代理发送任何消息,我是否应该使用代理?