2024 Clojure 状态调查! 中分享您的想法。

欢迎!请参阅 关于 页面以了解更多关于如何使用此页面的信息。

+2
Clojure
重新标记

在调用线程被中断的情况下,取消引用一个 已履行 的承诺将抛出 InterruptedException

(let [p (promise)]
  (deliver p :value)
  (.interrupt (Thread/currentThread))
  (assert (realized? p))
  (deref p)) ;; => InterruptedException

这是意外的,因为检索已经解决的承诺的值不应该阻塞。

通过 Promesa 库使用 CompletableFuture 不会抛出

(require '[promesa.core :as p]) ;'

(let [p (p/deferred)]
  (p/resolve! p :value)
  (.interrupt (Thread/currentThread))
  (deref p)) ;; => ::value

2 个答案

0

这是 Clojure 或 ClojureScript 或两者都?

Clojure -- ClojureScript 中没有线程
0
...