2024 Clojure 状态调查 中分享您的想法!

欢迎!请参阅 关于 页面以获取更多关于这是如何工作的信息。

+7
core.async

在遇到涉及关闭超时通道的竞态条件后,看来在 docstring 中提到不应在超时通道上调用 close! 应该是合适的。随附的补丁调整了 docstring 来达到这个效果。请告知是否需要稍微更改措辞。

4 个答案

+2

评论者:alexmiller

我认为修复这个问题比文档它更好。

+1
参考: https://clojure.atlassian.net/browse/ASYNC-109(由 alex+import 报告)
> 是的,我认为解决这个问题比记录它更好。

我个人非常欢迎将这个问题改为错误的补丁。这可能会为我们节省大约3天的时间,因为我们曾经历过在繁忙的服务器上非常奇怪的timeout行为,耗费了大量精力进行调试。
作为替代方案,可以考虑恢复https://github.com/clojure/core.async/commit/ca80990bdcef6c46a93b93b82a3337fff22432d7
另外一个需要恢复的理由是你可能会意外地遇到1024个taker的限制。检查以下可重复的示例,假设你的机器足够快
```
(let [err (promise)
      chs (into [] (repeatedly 32 #(a/timeout 1000)))]
  (doseq [ch chs]
    (dotimes [_ 33]
      (try (a/take! ch (fn [_]))
           (catch Error e
             (deliver err e)))))
  @err)
```

这也可能是一些现有core.async部署中的潜在问题,一旦机器变快,这些问题才会显现出来。
0 投票

评论者为:hlewisship

另或,如果timeout通道上的close!会抛出异常会更好。

0 投票

评论者为:slipset

或者,让它变成一个无操作?

...