我想在大列表上做一个并行地图。代码看起来有点像这样:Elixir Stream中的Task.async
big_list
|> Stream.map(&Task.async(Module, :do_something, [&1]))
|> Stream.map(&Task.await(&1))
|> Enum.filter filter_fun
但我检查流实现而据我了解Stream.map
结合了功能和应用组合功能的流,这将意味着顺序是这样的内容:
- 以第一要素
- 创建异步任务
- 等待它完成
- 采取第二elelemnt ...
在这种情况下,它不会做并行。我是对的还是缺少什么?
如果我是正确的,那这个代码?
Stream.map Task.async ...
|> Enum.map Task.await ...
这是否会平行运行?
阅读本 - http://www.theerlangelist.com/2015/07/beyond-taskasync.html – emaillenin