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

欢迎!请参阅关于页面以了解该功能的更多信息。

+7
core.async

在遇到涉及已关闭超时通道的竞态条件后,似乎应该在文档字符串中提到,不应在超时通道上调用close!。所附补丁调整了文档字符串以反映这一点。如果您想修改措辞,请告知。

4个答案

+2

评论者:alexmiller

我认为解决这个问题比仅记录它更好。

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

我个人非常欢迎将这个问题修正为错误的补丁。这将为我们节省大约3天的时间,让我们不必密集地调试一个繁忙服务器中非常奇怪的超时行为。
by
作为替代方案,可以考虑撤销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
by

评论由:hlewisship发表

另外/另外,如果超时通道上的close!会抛出异常将会很好。

0
by

评论由:slipset发表

或者不做处理?

...