9得票1回答
如何使用转换器从另一个通道创建通道?

我想从另一个仅筛选特定消息的通道创建 clojure.core.async 通道。因此,我找到了一个名为 filter< 的函数。 => (def c1 (chan)) => (def c2 (filter< even? c1)) => (put! c1 1) ...

37得票1回答
我能否使用http-kit和core.async创建完全非阻塞的后端应用程序?

我想知道是否可能使用http-kit组合一个完全非阻塞的Clojure后端Web应用程序。 (实际上,任何兼容Ring的http服务器都可以,我提到http-kit是因为它声称具有事件驱动的、非阻塞模型)。 编辑:简述 这个问题是我对非阻塞/异步/事件驱动系统本质的一些误解的症状。如...

9得票3回答
如何停止ClojureScript/core.async中的go block?

有没有一种优雅的方法来停止正在运行的go块?(不引入标志并污染代码与检查/分支) (ns example (:require-macros [cljs.core.async.macros :refer [go]]) (:require [cljs.core.async ...

10得票3回答
优雅地退出Clojure core.async中的go loop在kill时

我有一个顶层的core.async循环。我希望它无限运行,至少要等到我使用CTRL-C或类似的kill命令发送停止信号。我目前正在使用java.lang.Runtime/addShutdownHook来实现:(ns async-demo.core (:require [clojure.co...

9得票2回答
使用core.async等待n个通道

同样的,alt!等待n个通道中的一个获得值,我正在寻找等待所有n个通道都获得值的惯用方法。 我需要这个是因为我"spawn"了n个go块来处理异步任务,并且我想知道它们何时完成。我相信有一种非常优美的方法可以实现这一点。

7得票1回答
Clojure核心异步put!与go块的比较

我读过这篇关于核心异步的好文章: http://www.core-async.info/reference/primitives 我理解: 1. put! 是异步的并可以接受回调。在简单场景下运作良好,但可能会陷入回调地狱。 2. go 可以解决回调地狱问题,并允许使用同步方式编写异步代码...

61得票5回答
比较core.async和函数响应式编程(+Rx)

当我比较Clojure的core.async和所谓的响应式扩展(Rx)以及FRP时,我有些困惑。它们似乎解决了相似的异步问题,我想知道它们的主要区别,并在什么情况下优先使用其中之一。请问能否给出解释? 编辑:为了鼓励更深入的回答,我想让问题更具体: Core.async允许我编写看起来同...

10得票1回答
Clojure core.async,通道 vs 端口

在Clojure core.async中,通道(channels)和端口(ports)是同一件事吗?如果不是,它们有什么区别?在观看视频Timothy Baldridge - Core.Async时,他创建了一个通道。(def c (chan)) 之后(<!! c) c 是通道,但是 &...

9得票2回答
核心.async中的go块和线程的区别

来自http://martintrojer.github.io/clojure/2013/07/07/coreasync-and-blocking-io/: To get a bit more concrete let's see what happens when we try to i...

15得票1回答
Clojure如何停止所有go块或关闭core.async中的所有通道

往往当我在repl中使用core.async时,一个go块会跑飞,因为我丢失了用于停止它的通道,原因是我重新加载了命名空间。比如,如果我从repl中运行下面的代码:(go (when (not= c (second (async/alts! [c (async/timeout 1000)]))...