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 \\ [])。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
