【发布时间】:2017-04-27 22:21:10
【问题描述】:
我有一个函数可以处理来自共享通道的值流并查找满足特定谓词的值:
(defn find-my-object [my-channel]
(go-loop []
(when-some [value (<! my-channel)]
(if (some-predicate? value)
value
(recur)
现在我希望这个函数在等待超时后返回一些“失败”值,我已经这样实现了:
(alts! [(find-my-object my-channel) (timeout 1000)])
这样做的问题是上面的go-loop在超时后继续执行。我希望find-my-object 从my-channel 中提取值而 搜索正在进行中,但我不想在超时时关闭my-channel,因为它已在其他一些地方使用。实现此功能的惯用方式是什么?
【问题讨论】:
标签: clojure core.async