hey Jose, what would be the output if there is a timeout? Something like
{:error, {input, :timeout}} ?

Wouldn't something like
{input, {:ok, output}
or
{input, {:error, :timeout}}

be more inline with zipping? It would conceptually be something like

inputs = [1, 2]
work = fn x -> {:ok, x * x} end
Enum.zip(inputs, Enum.map(inputs, work))

[{1, {:ok, 1}}, {2, {:ok, 4}}]

The thing that does not convince me in this shape is that the :ok or :error
are not in the first position, but if we are explicitly saying that we want
to zip the results maybe it's expected?
*_________________________________________________________**_**____*
*Juan* -
*No todo el oro reluce.....Ni todo errante anda perdido*
*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯**¯**¯**¯¯¯¯*


On Mon, 21 Feb 2022 at 08:54, José Valim <jose.va...@dashbit.co> wrote:

> {:ok, {input, output}} and so on. A PR is welcome!
>
> On Mon, Feb 21, 2022 at 08:40 vtm <vtmilya...@gmail.com> wrote:
>
>> Hi, i really want to add this zip_inputs method.
>> what do you think?
>> if yes, I'll do the PR, but what kind of zip do you want?
>> ```
>> [{:ok, _input_, output}]
>> [{:error, _input_, :timeout}]
>> or something along the lines of
>> [{_input_, {:ok, output}]
>> [{_input_, {:error, :timeout}]
>>
>> пт, 18 февр. 2022 г. в 13:08, José Valim <jose.va...@dashbit.co>:
>>
>>> Maybe we should have a zip_inputs: true or similar flag and we attach
>>> the input to all "ok" and "exit" tuples.
>>>
>>> On Fri, Feb 18, 2022 at 11:03 AM vtm <vtmilya...@gmail.com> wrote:
>>>
>>>> Hi Jose and Juan.
>>>> I think there is a problem that you should have `order: true` to have a
>>>> correct result in Enum.zip
>>>> Also you might wanna have a big list and just use  `big_list |>
>>>> Task.async_stream(params) |> Stream.filter(stream, &is_error/1) |>
>>>> Stream.map(&handle_error/1)  |> Stream.run`
>>>> just to capture error with values and do some work
>>>>
>>>>
>>>> пт, 18 февр. 2022 г. в 12:48, José Valim <jose.va...@dashbit.co>:
>>>>
>>>>> Hi Juan,
>>>>>
>>>>> In your example a simple Enum.zip would suffice:
>>>>>
>>>>> list = [1, 2, 3, 4]
>>>>>
>>>>> list
>>>>> |> Task.async_stream(
>>>>>   fn entry ->
>>>>>     if entry == 3, do: :timer.sleep(2000)
>>>>>     entry * entry
>>>>>   end,
>>>>>   timeout: 1000,
>>>>>   on_timeout: :exit_task
>>>>> )
>>>>> |> Enum.zip(list)
>>>>>
>>>>> Can you provide an example where zipping would not be possible or too
>>>>> cumbersome?
>>>>>
>>>>> On Fri, Feb 18, 2022 at 10:38 AM Juan Peri <eternoperegr...@gmail.com>
>>>>> wrote:
>>>>>
>>>>>> In these past few year I've found myself needing to execute several
>>>>>> async tasks (mostly around getting remote resources) in scripts, and
>>>>>> wanting to do something in the ones that fail
>>>>>> With the current implementation of async_stream, there is no way to
>>>>>> know which ones failed, as the output would look like the following:
>>>>>> ```
>>>>>> [1, 2, 3, 4]
>>>>>> |> Task.async_stream(
>>>>>>   fn entry ->
>>>>>>     if entry == 3, do: :timer.sleep(2000)
>>>>>>     entry * entry
>>>>>>   end,
>>>>>>   timeout: 1000,
>>>>>>   on_timeout: :exit_task
>>>>>> )
>>>>>> |> Enum.to_list()
>>>>>> [ok: 1, ok: 4, exit: :timeout, ok: 16]
>>>>>> ```
>>>>>> That would force me to get creative with stream Zip, or hand roll my
>>>>>> own solution.
>>>>>>
>>>>>> @vtm in the elixir slack pointed me to the commit
>>>>>> https://github.com/elixir-lang/elixir/commit/c94327cc4 in wich such
>>>>>> functionality was removed because of backwards compatibility.
>>>>>> And the commit that introduced it was
>>>>>> https://github.com/elixir-lang/elixir/commit/6c1fe08a676f1cacb7ee66dd56251b8a48a02d63#diff-0e81c1197153b352765d1d43ca57817901d19813a220e95a2cd2e70f3cfaa279R376
>>>>>> when adding the :ordered parameter to Task.async_stream
>>>>>>
>>>>>> Would you accept a PR about exposing this functionality again, but
>>>>>> behind a opt-in new parameter that is false by default in order to keep
>>>>>> backwards compatibility.
>>>>>>
>>>>>> Using the previous example, it would look something like:
>>>>>> 1, 2, 3, 4]
>>>>>> |> Task.async_stream(
>>>>>>   ...,
>>>>>>   timeout: 1000,
>>>>>>   on_timeout: :exit_task_with_value,
>>>>>> )
>>>>>> |> Enum.to_list()
>>>>>> [ok: 1, ok: 4, {:exit :timeout, 3}, ok: 16]
>>>>>> ```
>>>>>> I'm not sold in the flag :exit_task_with_value, it could be a
>>>>>> separate parameter as well, as long as it's opt_in
>>>>>>
>>>>>> Thanks
>>>>>> *_________________________________________________________**_**____*
>>>>>> *Juan* -
>>>>>> *No todo el oro reluce.....Ni todo errante anda perdido*
>>>>>> *¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯**¯**¯*
>>>>>> *¯¯¯¯*
>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "elixir-lang-core" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>> send an email to elixir-lang-core+unsubscr...@googlegroups.com.
>>>>>> To view this discussion on the web visit
>>>>>> https://groups.google.com/d/msgid/elixir-lang-core/CAPx9ufN-kdNYuAJri_z9pxQ-0yopvSdNUVBLpZ1G6fTHPk1BDw%40mail.gmail.com
>>>>>> <https://groups.google.com/d/msgid/elixir-lang-core/CAPx9ufN-kdNYuAJri_z9pxQ-0yopvSdNUVBLpZ1G6fTHPk1BDw%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>>> .
>>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to a topic in the
>>>>> Google Groups "elixir-lang-core" group.
>>>>> To unsubscribe from this topic, visit
>>>>> https://groups.google.com/d/topic/elixir-lang-core/XCQIKQc3KxM/unsubscribe
>>>>> .
>>>>> To unsubscribe from this group and all its topics, send an email to
>>>>> elixir-lang-core+unsubscr...@googlegroups.com.
>>>>> To view this discussion on the web visit
>>>>> https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4Li9mcnQ2mqN4xKb0qW9AX5uFi%2BXD77BDrqR-%3D0gW_8iA%40mail.gmail.com
>>>>> <https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4Li9mcnQ2mqN4xKb0qW9AX5uFi%2BXD77BDrqR-%3D0gW_8iA%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "elixir-lang-core" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to elixir-lang-core+unsubscr...@googlegroups.com.
>>>> To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/elixir-lang-core/CAKrSanzzRBYyFCM6T6dFRWoXVPBj-k2jbci2wfEsJa4bnDvL7g%40mail.gmail.com
>>>> <https://groups.google.com/d/msgid/elixir-lang-core/CAKrSanzzRBYyFCM6T6dFRWoXVPBj-k2jbci2wfEsJa4bnDvL7g%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>> .
>>>
>>>
>>>> --
>>> You received this message because you are subscribed to a topic in the
>>> Google Groups "elixir-lang-core" group.
>>> To unsubscribe from this topic, visit
>>> https://groups.google.com/d/topic/elixir-lang-core/XCQIKQc3KxM/unsubscribe
>>> .
>>> To unsubscribe from this group and all its topics, send an email to
>>> elixir-lang-core+unsubscr...@googlegroups.com.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4LS9n3e5pPCvi4bkKudhPRNd%3Dp6zfJxhzGpiFNqQi%3DT4g%40mail.gmail.com
>>> <https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4LS9n3e5pPCvi4bkKudhPRNd%3Dp6zfJxhzGpiFNqQi%3DT4g%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "elixir-lang-core" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to elixir-lang-core+unsubscr...@googlegroups.com.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/elixir-lang-core/CAKrSanzj1T8de0teHzFFiF6zJQKoreRptmcVpa_0jB%2BNcS7fBw%40mail.gmail.com
>> <https://groups.google.com/d/msgid/elixir-lang-core/CAKrSanzj1T8de0teHzFFiF6zJQKoreRptmcVpa_0jB%2BNcS7fBw%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "elixir-lang-core" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/elixir-lang-core/XCQIKQc3KxM/unsubscribe
> .
> To unsubscribe from this group and all its topics, send an email to
> elixir-lang-core+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4KFFYaRf6aj3mSidi_Jbp35RoOXW4hHqxTQfN0sLHHpkw%40mail.gmail.com
> <https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4KFFYaRf6aj3mSidi_Jbp35RoOXW4hHqxTQfN0sLHHpkw%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elixir-lang-core+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-core/CAPx9ufOu1NVFpru9rVO2sohRo-79GTAk%3DFNnVBOoE-D0qZ_Pig%40mail.gmail.com.

Reply via email to