Elixir:是否有更简洁的方式运行Task?

时间:2019-09-07 18:24:53

标签: elixir elixir-tasks

我刚刚开始在Elixir中尝试Tasks。
1)是否有更简洁的方式开始N Tasks
2)创建{symbol,task}的Map比创建Tasks的List更好吗?

stocks=["bsx","wmt"]

# assume this is a long-running function
longfunc = fn(sym) -> "nyse:"<>sym end 

tasks = Enum.reduce(stocks, [], fn(x,acc) -> [Task.async(fn -> longfunc.(x) end)| acc] end )

Enum.map(tasks, &Task.await/1)

1 个答案:

答案 0 :(得分:1)

Task.async_stream/5提供了用于运行任务列表的简单界面。这是使用Task.async_stream/3的示例:

["bsx", "wmt"]
|> Task.async_stream(&("nyse:" <> &1))
|> Enum.to_list() # or any stream enumeration
#⇒ [ok: "nyse:bsx", ok: "nyse:wmt"]