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