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