解引用一个 已交付的 承诺,当调用线程被中断时将抛出 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