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

欢迎!请参阅关于页面以了解有关如何使用此服务器的更多信息。

+7
core.async

遇到关于关闭超时通道的竞争条件后,似乎在文档字符串中提及绝对不应在超时通道上调用close!是恰当的。附带的补丁调整了文档字符串以达到这个目的。如果有任何字词需要更改,请告知。

4个回答

+2

评论人:alexmiller

我认为修复这个问题而不是在文档中说明它会更好。

+1
参考: https://clojure.atlassian.net/browse/ASYNC-109(由ale昂+import报告)
> 我认为修复这个问题而不是在文档中说明它会更好。

我非常欢迎这个使它成为错误的补丁。这将为我们节省大约3天的紧张调试时间,这些调试涉及到一个忙碌服务器中非常奇怪的超时行为。
作为替代,可以考虑回滚 https://github.com/clojure/core.async/commit/ca80990bdcef6c46a93b93b82a3337fff22432d7
回滚的另一个强烈理由是你可能意外地遇到1024个take限制。检查以下复现,假设你的机器足够快
```
(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 添加的评论

或者更进一步,使其为无操作吗?

...