假设c
是一个大小为n
的频道。我正在尝试在clojure(脚本)中编写一个函数,该函数检查c
是否已满,如果是,则关闭通道。
但是如何检查频道是否已满?
答案 0 :(得分:4)
core.async为此提供了一对函数:
所以你可以这样写:
(if-not (offer! my-chan 42)
(close! my-chan))
当您在频道上放置内容时,这将实现此目的。这可能比尝试让另一个进程监视它已满并然后关闭它更安全。如果你真的想检查它是否已满,你可以提取缓冲区并询问它:
user> (->> (async/chan (async/buffer 1))
(.buf)
(.full?))
false
虽然认真通过先仔细考虑。