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