ClojureDocs

名称空间

clojure.core.async

Facilities for async programming and communication.

go blocks are dispatched over an internal thread pool, which
defaults to 8 threads. The size of this pool can be modified using
the Java system property `clojure.core.async.pool-size`.

Set Java system property `clojure.core.async.go-checking` to true
to validate go blocks do not invoke core.async blocking operations.
Property is read once, at namespace load time. Recommended for use
primarily during development. Invalid blocking calls will throw in
go block threads - use Thread.setDefaultUncaughtExceptionHandler()
to catch and handle.

一个提供用于异步编程和通信的 Clojure 库。

Core.async 不是 Clojure 标准发行版的一部分,因此必须作为依赖项包括在内.

社区链接
clojure.core.async 中的 Vars

*^%

<!
从端口中获取 val。必须在 (go ...) 块内调用。如果已关闭,将返回 nil。如果没有可用内容,将挂起。
<!!
从端口中获取一个 val。如果已关闭,将返回 nil。如果没有可用内容,将阻塞。不适用于 (go ...) 块的直接或传递调用。使用 clojure.core.async.go-checking 标记来检测无效使用(请参阅名称空间文档)。
>!
将 val 放入端口中。不允许 nil 值。必须在 (go ...) 块内调用。如果没有缓冲空间可用,将挂起。除非端口已关闭,否则返回 true。
>!!
将 val 放入端口中。不允许 nil 值。如果没有缓冲空间可用,将阻塞。除非端口已关闭,否则返回 true。不适用于 (go ...) 块的直接或传递调用。使用 clojure.core.async.go-checking 标记来检测无效使用(请参阅名称空间文档)。

a

admix
将 ch 添加为混合输入
admix*
无文档
alt!
在多个通道操作中进行单一选择,就像 alts! 一样,返回操作完成的 result expr 的值。必须在 (go ...) 块内调用。每个子句采用以下形式:通道操作 [结果表达式]其中通道操作之一:take-port - 一个要取用的单一端口[take-port | [put-port put-val] ...] - 一个端口向量,如 alts!:默认 |:优先级 - alts! 的一个选项,result-expr 是以向量开头的列表,其中该向量将被视为操作返回的 [val 端口] 绑定,否则为任何其他表达式。(alt! [c t] ([val ch] (foo ch val)) x ([v] v) [[out val]] :wrote :default 42)每个选项最多出现一次。选择和挂起特性是 alts!
alt!!
与 alt! 类似,除非使用 alts!,会阻塞直到完成,并且不适用于 (go ...) 块。
alts!
最多完成多个通道操作之一。必须在 (go ...) 块中调用。端口是通道端点的向量,它可以是从中获取的通道,也可以是 [要放入的通道要放入的值] 的向量,这些通道可以以任意组合排列。获取将如同通过!. 除非 :priority 选项为 true,否则如果多个端口操作就绪,将进行非确定性选择。如果没有操作就绪并且提供了 :default 值,则将返回 [default-val :default],否则 alts!将停靠,直至第一个要就绪的操作完成。返回已完成操作的 [val port],其中 val 是获取的取值,以及对于 put! 的布尔值(如果尚未关闭则为 true)。opts 以 :key val ... 传递。受支持的选项::default val - 如果没有操作立即就绪,要使用的值::priority true - (默认值 nil)为 true 时,这些操作将按顺序进行尝试。请注意:不能保证会使用 port 表达式或 val 表达式,也不能保证应按什么顺序使用它们,因此不应依赖于它们进行副作用。
alts!!
与 alts! 类似,除非获取将如同通过!! 进行获取,会阻塞直到完成。不适用于 (go ...) 块的直接或传递调用。使用 clojure.core.async.go-checking 标志来检测无效使用(参见命名空间文档)。

b

缓冲区
返回大小为 n 的固定缓冲区。当缓冲区已满时,put 会阻塞/停靠。

c

通道
创建一个通道,其中包含可选缓冲区、可选转换器(如 (map f)、(filter p) 等或其组合)以及可选的异常处理程序。如果 buf-or-n 是数字,将创建并使用该大小的固定缓冲区。如果提供了转换器,则必须指定缓冲区。ex-handler 必须是一个带有单个参数的 fn - 如果在转换期间发生异常,则将使用 Throwable 作为参数对其进行调用,任何不为 null 的返回值都将被置于通道中。
close!
关闭通道。通道将不再接受任何 put(它们将被忽略)。通道中的数据仍可用于获取,直至耗尽,之后获取将返回 nil。如果有任何待处理的获取,它们将通过 nil 进行分派。关闭已关闭的通道为无操作。返回 nil。在逻辑上,关闭发生在提交所有 put 之后。因此,任何被阻塞或停靠的 put 都将停留在阻塞/停靠状态,直至获取者释放它们。

d

defblockingop
无文档
do-alt
无文档
do-alts
如果立即返回可解除引用的 [val port],如果已排队,返回 nil
丢弃缓冲区
返回大小为 n 的缓冲区。当缓冲区已满时,put 将完成,但值将被丢弃(不进行传输)。

f

filter<
已弃用 - 该函数将被移除。请改为使用转换器
filter>
已弃用 - 该函数将被移除。请改为使用转换器
fn-handler
无文档

g

go
异步执行 body,立即返回到调用线程。此外,body 中对以下任何可见调用!和 alt!/alts! 通道操作会阻塞(如果需要)通过‘停靠’调用线程,而不是绑定 OS 线程(或在 ClojureScript 中的唯一 JS 线程)。当操作完成时,将恢复 body。go 块不应(直接或间接地)执行可能无限期阻塞的操作。执行此操作有耗尽固定的 go 块线程池的风险,导致所有 go 块处理停止。这包括核心异步阻塞操作(以 !! 结尾)和其他阻塞 IO。返回一个通道,该通道在 body 完成后将接收其结果。
go-loop
类似于 (go (loop ...))

i

放入
返回一个通道,包含从通道中获取的单个(集合)结果,与已提供的集合联接在一起。在 into 返回结果之前 ch 必须关闭。
ioc-alts!
无文档

m

map
接收一个函数和一个源通道集合,并返回一个通道,它包含对每个源通道内最早的一组项目应用 f 产生的值、接着应用 f 到每一通道中的第二组项目,直到任何一个通道关闭为止,这时输出通道将被关闭。默认返回的通道将不会进行缓冲,或者可以提供一个 buf-or-n。在所有源通道关闭后通道将关闭。
map<
已弃用 - 该函数将被移除。请改为使用转换器
map>
已弃用 - 该函数将被移除。请改为使用转换器
mapcat<
已弃用 - 该函数将被移除。请改为使用转换器
mapcat>
已弃用 - 该函数将被移除。请改为使用转换器
merge
接收一个源通道集合,并返回一个通道,其中包含从它们中获取的所有值。默认返回的通道将不会进行缓冲,或者可以提供一个 buf-or-n。在所有源通道关闭后通道将关闭。
mix
创建并返回一个由一个或多个输入通道组成的混合,这些混合将放在已提供的输出通道上。可以使用“admix”向混合中添加输入源,并可以使用“unmix”移除。混合支持以原子方式使用“切换”独奏、静音和暂停多路输入,还可以使用“独奏模式”确定使用静音或暂停进行独奏。每个通道都可以通过“切换”设置零个或多个布尔模式::solo - 为真时,仅此(和其它独奏)通道将出现在混合输出通道中。静音的独奏通道状态和暂停的独奏通道状态将被忽略。如果独奏模式为:静音,未独奏的通道将被静音;如果为:暂停,未独奏的通道将被暂停。:静音 - 静音的通道其内容将被使用,但不会包含在混合之中。:暂停 - 暂停的通道其内容不会被使用(也不会包含在混合之中)。
Mix
无文档
Mult
无文档
mult
创建并返回提供的通道的组合(多个)。可以使用“tap”创建包含通道副本的通道,并可以使用“untap”释放副本。每个项目同步并行分发到所有分支,即在分发下一个项目之前每个分支都必须接受。使用缓冲/窗口来防止慢速分支阻碍组合。如果没有分支,则接收到的项目将被丢弃。如果一个分支已放入一个关闭的通道,它将从组合中移除。
Mux
无文档
muxch*
无文档

o

offer!
如果现在可以,将一个值放入端口。不允许 nil 值。绝不会阻塞。如果放入成功,则返回 true。
onto-chan
已弃用 - 使用 onto-chan! 或 onto-chan!!
onto-chan!
将 coll 的内容放入提供的通道中。默认情况下,在项目复制完成后通道将关闭,但可以由 close? 参数确定。在项目复制完成后,返回一个通道,并且该通道将在复制完成后关闭。如果访问 coll 可能会阻塞,改用 onto-chan!!
onto-chan!!
如同 onto-chan!,但用于访问 coll 可能阻塞的情况,例如一个阻塞操作的延迟序列。

p

partition
已弃用 - 该函数将被移除。请改为使用转换器
partition-by
已弃用 - 该函数将被移除。请改为使用转换器
pipe
从 from 通道中获取元素并将其提供给 to 通道。默认情况下,当 from 通道关闭时,to 通道将关闭,但可以由 close? 参数确定。如果 to 通道关闭,它将停止使用 from 通道。
pipeline
从 from 通道中选取引数,并根据换能器 xf 提供给到 to 通道,平行度为 n。由于它是并行的,因此换能器将独立于每个元素(而非跨元素)应用,并且可能针对每个输入产生零个或多个输出。输出将按照与输入相关的顺序返回。默认情况下,当 from 通道关闭时,to 通道将关闭,但可以通过 close? 参数确定。如果 to 通道关闭,将停止使用 from 通道。请注意,这应该用于计算并行度。如果你有多个阻塞操作需要执行,请使用 pipeline-blocking。如果你有多个异步操作需要执行,请使用 pipeline-async。有关 ex-handler 的语义,请参阅 chan。
pipeline-async
从 from 通道中选取引数,并根据异步函数 af 提供给到 to 通道,平行度为 n。af 必须是两个参数的函数,第一个参数是输入值,第二个参数是放置结果的通道。假定 af 将立即返回,并在启动了一些异步操作(其完成/回调将把结果放在通道上)后关闭它。输出将按照与输入相关的顺序返回。默认情况下,当 from 通道关闭时,to 通道将关闭,但可以通过 close? 参数确定。如果 to 通道关闭,将停止使用 from 通道。请参见 pipeline、pipeline-blocking。
pipeline-blocking
类似于 pipeline,适用于阻塞操作。
poll!
如果可以立即执行,则从端口提取 val。从不阻塞。如果成功,则返回值;否则,返回 nil。
promise-chan
创建一个 promise 通道,并带有可选的换能器和可选的异常处理程序。promise 通道可以获取一个值,消费者将接收该值。一旦填满,则放入完成但 val 则删除(不传输)。消费者将阻塞,直至将值放入通道或通道关闭,然后永远返回该值(或 nil)。有关 xform 和 ex-handler 的语义,请参阅 chan。
Pub
无文档
pub
创建并返回提供通道的 pub(lication),按 topic-fn 对其划分分区。topic-fn 将应用于通道上的每个值,而结果将确定该值将被放入的“主题”。可以订阅通道以使用“sub”接收主题的副本,并使用“unsub”取消订阅。每个主题将由专用通道上的内部 mult 处理。默认情况下,这些内部通道是无缓冲的,但可以提供 buf-fn,该 fn 给定一个主题,会创建一个具有所需特性的缓冲区。每个项目都会并行且同步地分发到所有订阅者,即在分发下一个项目之前,每个订阅者都必须接受。使用缓冲/窗口化来防止较慢的订阅者阻碍 pub。在没有匹配的订阅者时接收到的项目将被删除。请注意,如果使用 buf-fn,则每个主题将被异步处理,即如果一个通道订阅多个主题,则它不应希望它们与源完全交错。
put!
异步地将 val 放入端口,在完成时(如果提供)调用 fn1,当且仅当端口已经关闭时传递 false。不允许为 nil 值。如果 on-caller? 为 true(默认值),并立即接受 put,则将在调用线程上调用 fn1。fn1 可以在固定大小的派发线程池中运行,不应执行阻塞 IO,包括 core.async 阻塞操作(那些以 !! 结尾的操作)。返回 true,除非端口已经关闭。

r

reduce
f 应该是 2 个参数的函数。返回一个包含将 f 应用于 init 和通道中的第一个项目的结果的通道,然后将 f 应用于该结果和第 2 个项目等。如果通道在未生成项目的情况下关闭,则返回 init,并且不会调用 f。ch 必须关闭,然后 reduce 会生成结果。
remove<
已弃用 - 该函数将被移除。请改为使用转换器
remove>
已弃用 - 该函数将被移除。请改为使用转换器

s

sliding-buffer
返回大小为 n 的缓冲区。已满时,放入操作将会完成,并被缓冲,但缓冲区中最旧的元素将会被丢弃(不会被传输)。
单人模式
设置混音的单人模式。模式必须为以下模式之一::mute 或 :pause
单人模式*
无文档
分割
获取谓词和源通道并返回两个通道的向量。其中第一个通道将包含谓词返回真值的元素,第二个通道将包含返回假值的元素。默认情况下,输出通道将不会被缓冲,或可以提供两个 buf-or-ns。源通道关闭后,这些通道将会关闭。
订阅
将一个通道订阅到 pub 的一个主题。默认情况下,源关闭时,通道将会关闭,但可以通过 close? 参数来确定。
订阅*
无文档

t

获取
返回一个通道,其中最多会返回 ch 中的 n 个项目。在返回 n 个项目之后,或 ch 关闭后,返回通道将被关闭。默认情况下,输出通道未被缓冲,除非给出了 buf-or-n。
获取!
异步从端口获取一个 val,传递到 fn1。如果关闭,则传递 nil。如果 on-caller?(默认值为 true)为 true,并且值立即可用,则将在调用线程上调用 fn1。fn1 可以在固定大小的分派线程池中运行,并且不应执行阻塞 IO,包括 core.async 阻塞操作(以 !! 结尾的那些)。返回 nil。
tap
将 mult 源复制到所提供的通道。默认情况下,源关闭时,通道将会关闭,但可以通过 close? 参数来确定。
提取*
无文档
线程
在另一个线程中执行正文,立即返回到调用线程。返回一个通道,它将在完成后接收正文的结果,然后关闭。
线程调用
在另一个线程中执行 f,立即返回到调用线程。返回一个通道,它将在 f 执行完成后接收调用 f 的结果,然后关闭。
超时
返回一个在 msecs 之后将关闭的通道
转到通道
已弃用 - 使用 to-chan! 或 to-chan!!
转到通道!
创建并返回一个包含 coll 内容的通道,在用尽时关闭。如果访问 coll 可能会阻塞,请改用 to-chan!!
转到通道!!
与 to-chan! 类似,在访问 coll 可能会阻塞时使用,例如阻塞操作的惰性序列
切换
以原子方式设置混音中一个或多个通道的状态。状态映射是通道 -> 通道状态映射的映射。通道状态映射是属性 -> 布尔值映射,其中属性为以下一项或多项::mute、:pause 或 :solo。提供的任何状态都将与当前状态合并。请注意,可以通过切换将通道添加到混音中,该切换可用于在特定状态下(例如暂停)添加通道。
切换*
无文档
转换
使用转换(xform f)对通道进行 async/reduce。返回一个包含结果的通道。在转换产生结果之前,ch 必须关闭。

u

非阻塞缓冲区?
如果使用 buff 创建的通道永远不会阻塞,则返回 true。也就是说,放入此缓冲区永远不会导致缓冲区已满。
唯一
已弃用 - 该函数将被移除。请改为使用转换器
取消混音
将 ch 从 mix 中的输入中移除
取消混音*
无文档
取消全部混音
从混音中移除所有输入
取消订阅
从 pub 的主题中取消订阅一个通道
取消订阅*
无文档
取消全部订阅
取消订阅 pub 或 pub 的主题中的所有通道
取消提取
从 mult 断开目标通道
取消提取*
无文档
取消全部提取
从 mult 断开所有目标通道