2024 年 Clojure 状况调查!中分享您的想法。

欢迎!有关这个系统如何工作的更多信息,请参阅关于页面。

+2
Java Interop
已关闭

clojure.java.process 中 IBlockingDeref 的实现未按照 deref 文档字符串中的规范进行。

3 参数的 IBlockingDeref 预期 timeout 以毫秒为单位,第三参数是 timeout-valclojure.java.process 中的实现(以下是链接的第 113 行)错误地期待前两个参数是一个带有其单位在最后一个参数中指定的 java.util.concurrent.TimeUnit 的超时。如果给定了某个 j.u.c.TimeUnit 作为 timeout-val,在超时后仍会返回 nil

期望:这个 IBlockingDeref 的实现始终假定时单位硬编码为 TimeUnit/MILLISECONDS,并且在引用到 IBlockingDeref 时超时时,返回 timeout-val

查看 clojure/java/process.clj#L113

以以下注释关闭:在 Clojure 1.12.0-beta2 中修复
关于java.lang.Process.waitFor的期望,当前实现相对于普通IBlockingDeref的语义来说非常实用。处理过程超时通常可以指定为秒或分钟,而不是毫秒。.waitFor超时的预期返回值是布尔类型,没有指定超时,那么它就只是Process的退出代码。处理返回退出代码(或超时时的nil)以及处理某些超时值可以非常容易地处理。

然而——将此功能嵌入到IBlockingDeref中仍然很令人困惑。

1 个回答

0
by

谢谢!已记录https://clojure.atlassian.net/browse/CLJ-2865 - 我们将在1.12版本发布前修复这个问题。

...