我刚刚开始在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)
答案 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"]