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

欢迎!请参阅关于页面了解更多关于此的工作信息。

+7
core.async

在遇到涉及关闭超时通道的竞争条件后,似乎有必要在其文档字符串中提及不应该在超时通道上调用 close!。附带的补丁对此进行了调整。请指导是否需要更改措辞。

4 答案

+2

评论人:alexmiller

是的,我认为修复这个比在文档中说明更好。

+1
> 是的,我认为修复这个问题比记录它更好。

我非常欢迎将该内容改为错误的补丁。这帮我们节省了大约三天对服务器中非常奇特的超时行为进行密集调试的时间。
作为替代方案,可以考虑回滚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 发表的评论

或者,让它不做任何事情?

...