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

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

+7
core.async

在遇到涉及关闭的超时通道的竞争条件后,似乎有必要提及不应在其文档字符串上调用close!。所附补丁调整了文档字符串以反映这一点。请告知您是否希望更改措辞。

4 个答案

+2

评论者:alexmiller

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

+1
参考:https://clojure.atlassian.net/browse/ASYNC-109(由alexliver报告)
> 是的,我觉得修复这个问题比注释它更好。

我个人非常期待将这个补丁转换成错误的版本。这将为我们节省大约3天时间,我们来解决繁忙服务器中一个非常奇怪的超时行为。
作为另一种可能的方法,可以考虑撤销https://github.com/clojure/core.async/commit/ca80990bdcef6c46a93b93b82a3337fff22432d7
撤销它的另一个强烈理由是你可能会意外地遇到1024个接受者限制。检查以下重放,假设你的机器足够快
```
(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

或者此外,如果在超时通道上调用 close! 会抛出异常。

0 投票

评论者:slipset

或者此外/额外地,将其转换为无操作?

...