Task.async_stream |> Stream.drop_while中是否有任何订单?

时间:2017-10-21 20:15:34

标签: elixir

我有一个看起来像

的管道
digits
|> Task.async_stream(__MODULE__, :filter, [s, values], timeout: :infinity)
|> Stream.drop_while(fn {_, k} -> k == :contradiction or k == [] end)
|> Stream.take(1)

这里是否定义了任何订单?或者只返回不满足while条件的第一个filter的结果?

1 个答案:

答案 0 :(得分:1)

Task.async_stream has an optionordered: true | false。如果设置为true,则结果将与输入列表的顺序相同。当它为假时,结果将按任务完成的顺序排列。此选项的值默认为true,因此在您的代码中,结果的顺序与输入列表的顺序相同。

iex(1)> [5, 4, 3, 2, 1] |> Task.async_stream(fn x -> :timer.sleep(x * 100); x end) |> Enum.to_list
[ok: 5, ok: 4, ok: 3, ok: 2, ok: 1]
iex(2)> [5, 4, 3, 2, 1] |> Task.async_stream(fn x -> :timer.sleep(x * 100); x end, ordered: false) |> Enum.to_list
[ok: 1, ok: 2, ok: 3, ok: 4, ok: 5]