请在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
...