欢迎!请访问关于页面以了解更多信息。
在 clojure.java.process/start 中的 reification 的 IBlockingDeref 没有按照 deref 文档中的规范实现。
IBlockingDeref
deref
3 参数版本的 IBlockingDeref 期望 timeout 参数为毫秒,第三个参数是 timeout-val。在 clojure.java.process(下文链接的行 113) 实现中错误地期望两个参数都是一个超时,它的单位由最后一个参数指定的 java.util.concurrent.TimeUnit 决定。当给出一个 j.u.c.TimeUnit 作为 timeout-val 时,在超时后它仍然返回 nil。
timeout
timeout-val
clojure.java.process
java.util.concurrent.TimeUnit
j.u.c.TimeUnit
nil
预期:这个 IBlockingDeref 的实现始终假设时间单位是硬编码为 TimeUnit/MILLISECONDS,并且如果 deref 到 IBlockingDeref 超时,则返回给定的 timeout-val。
请参见clojure/java/process.clj#L113
谢谢!已登录为https://clojure.atlassian.net/browse/CLJ-2865 - 我们将在1.12发布前修复此问题。