Я хочу сделать параллельную карту по большому списку. Код выглядит примерно так:Task.async в Elixir Stream
big_list
|> Stream.map(&Task.async(Module, :do_something, [&1]))
|> Stream.map(&Task.await(&1))
|> Enum.filter filter_fun
Но я проверял реализацию потока и, насколько я понимаю, Stream.map
сочетает в себе функцию и применяет комбинированную функцию к элементам в потоке, который будет означать, что последовательность выглядит так:
- Возьмите первый элемент
- Создать ASync задачу
- Дождитесь ее завершения
- Возьмите вторую elelemnt ...
В этом случае он не делает это параллельно. Я прав, или я чего-то не хватает?
Если я прав, как насчет этого кода?
Stream.map Task.async ...
|> Enum.map Task.await ...
Это будет работать параллельно?
читать это - http://www.theerlangelist.com/2015/07/beyond-taskasync.html – emaillenin