gpt4 book ai didi

clojure - 在 Clojure 中捕获异步进程的异常?

转载 作者:行者123 更新时间:2023-12-02 15:46:09 24 4
gpt4 key购买 nike

假设我正在异步发送电子邮件,并希望我的程序继续执行。到目前为止,我一直在使用 future 进行此操作,但不幸的是,当电子邮件发送失败时,不会引发异常。

我知道取消引用 future 会引发 ExecutionException,但取消引用会破坏这一点。

是否有更好的方法“即发即走”,而不丢失异常信息?

最佳答案

为此,我会使用代理,使用处理程序函数来处理代理操作引发的异常:

(agent initial-state :error-handler handler-fn)

请参阅(文档代理)(doc set-error-handler!)(doc set-error-mode!)细节。这里的initial-state可能只是nil,或者可能是保存一些日志数据的结构。

为了方便起见,您需要一个可与 send 一起使用的 email 函数(send-off, send -via):

(defn email [agent-state message] ...)

如果需要通知主线程出现问题,则需要注意某个 channel 上的通信。 (Java 队列是一种可能性,core.async 的 channel 是另一种。)处理程序函数然后可以通过该 channel 推送消息。

关于clojure - 在 Clojure 中捕获异步进程的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18258348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com