clojure.core.async / ALTS! - 保证只运行一个频道?

时间:2016-05-31 11:11:13

标签: asynchronous clojure

当调用alts!!alts!时,是否保证只有一个端口被取出或放入?

(let [[value channel] (alts!! [c1 c2 c3 [1 c4]])]
   (cond (= channel c1)
         ; at this point, is it guaranteed that alts!!
         ; did not take from c2 and c3, and did not call (>!! c4 1)? 
         (do-something)))

我在文档中找不到与此相关的任何内容。我猜这是未定义的?

1 个答案:

答案 0 :(得分:3)

根据alts!' docstring功能" 完成最多一次的多个渠道操作。 [...] &#34 ;.

这意味着在调用函数时,将只在端口上执行一个或零(即它将停止)操作。哪个操作是非确定性的,如文档字符串中所述:" 除非:priority选项为true,否则如果准备了多个端口操作,则将进行非确定性选择"