Elixir语言中 Task.Supervisor.async_stream
相关用法介绍如下。
用法:
async_stream(supervisor, enumerable, module, function, args, options \\ [])
(从 1.4.0 开始)
@spec async_stream(
Supervisor.supervisor(),
Enumerable.t(),
module(),
atom(),
[term()],
keyword()
) ::
Enumerable.t()
返回一个流,其中给定函数(module
和 function
)同时映射到 enumerable
中的每个元素上。
每个元素将被添加到给定的args
并由其自己的任务处理。任务将在给定的 supervisor
下生成并链接到调用者进程,类似于
。async/5
流式传输时,每个任务将在成功完成时发出{:ok, value}
,如果调用者正在捕获退出,则发出{:exit, reason}
。结果的顺序取决于:ordered
选项的值。
并发级别和允许任务运行的时间可以通过选项来控制(参见下面的"Options" 部分)。
如果您发现自己捕获退出以处理异步流中的退出,请考虑使用
来启动未链接到调用进程的任务。async_stream_nolink/6
选项
-
:max_concurrency
- 设置同时运行的最大任务数。默认为System.schedulers_online/0
-
:ordered
- 结果是否应以与输入流相同的顺序返回。当您有大型流并且不想在结果交付之前缓冲结果时,此选项很有用。当您将任务用于副作用时,这也很有用。默认为true
。 -
:timeout
- 在没有收到任务回复的情况下(所有正在运行的任务)等待的最长时间(以毫秒为单位)。默认为5000
。 -
:on_timeout
- 当任务超时时该怎么办。可能的值是::exit
(默认)- 产生任务的进程退出。:kill_task
- 超时的任务被杀死。为该任务发出的值是{:exit, :timeout}
。
-
:shutdown
-:brutal_kill
如果任务必须在关机时直接终止,或者是一个指示超时值的整数。默认为5000
毫秒。
例子
让我们构建一个流,然后枚举它:
stream = Task.Supervisor.async_stream(MySupervisor, collection, Mod, :expensive_fun, [])
Enum.to_list(stream)
相关用法
- Elixir Task.Supervisor.async_nolink用法及代码示例
- Elixir Task.Supervisor.start_child用法及代码示例
- Elixir Task.Supervisor.start_link用法及代码示例
- Elixir Task.Supervisor用法及代码示例
- Elixir Task.yield_many用法及代码示例
- Elixir Task.async用法及代码示例
- Elixir Task.await_many用法及代码示例
- Elixir Task.completed用法及代码示例
- Elixir Task.yield用法及代码示例
- Elixir Task.async_stream用法及代码示例
- Elixir Task.await用法及代码示例
- Elixir Task用法及代码示例
- Elixir Time.add用法及代码示例
- Elixir Time.new用法及代码示例
- Elixir Tuple.duplicate用法及代码示例
- Elixir Time.to_erl用法及代码示例
- Elixir Tuple用法及代码示例
- Elixir Time.utc_now用法及代码示例
- Elixir Tuple.sum用法及代码示例
- Elixir Time.to_iso8601用法及代码示例
- Elixir Time.from_iso8601用法及代码示例
- Elixir Time.from_erl!用法及代码示例
- Elixir Time.from_seconds_after_midnight用法及代码示例
- Elixir Tuple.product用法及代码示例
- Elixir Time.truncate用法及代码示例
注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 Task.Supervisor.async_stream(supervisor, enumerable, module, function, args, options \\ [])。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。