Thanks. You could also send_after a message to yourself and then send it to the client. It is an extra step but it should be quite efficient too.
On Thu, Sep 2, 2021 at 23:57 Khionu Sybiern <[email protected]> wrote: > Maybe it could be moved to the client side of the API, but otherwise it > would be a lot of boilerplate. > > A point was raised on the Discord that this function could be a trap for > people still getting used to idiomatic Elixir, and they proposed multiple > other solutions, both in changing approach and how to do this without a > Task or new GenServer function. I'll withdraw my proposal, and I'll > summarize the discussion in the near future. > On Thursday, September 2, 2021 at 2:30:09 PM UTC-7 José Valim wrote: > >> In this case, then I think I would have the GenServer return immediately >> and say: you can call the service at time X. The client gets the response, >> see how much time it is needing, and handles it accordingly. Either by >> sleeping or by sending a message to itself. WDYT? >> >> On Thu, Sep 2, 2021 at 22:45 Khionu Sybiern <[email protected]> wrote: >> >>> The idea is that the rate limiter process itself doesn't need to be held >>> up because of the caller's need to respect the rate limit. Because the >>> delay is immediately calculable at the time, that can be immediately >>> delegated from the rate limiter process, allowing it to move on to the next >>> request. >>> >>> On Thursday, September 2, 2021 at 12:28:31 PM UTC-7 José Valim wrote: >>> >>>> Hi Khionu, can you please explain a bit more about the design? Why does >>>> it need to delay the response in such a way? Is it coming from the rate >>>> limiter process itself? >>>> >>>> On Thu, Sep 2, 2021 at 21:02 Khionu Sybiern <[email protected]> wrote: >>>> >>>>> I have a case where I use a GenServer to block other operations from >>>>> happening in order to respect ratelimits of a third party. Right now, I >>>>> spawn a Task that uses GenServer.reply after a sleep, then return >>>>> :no_reply. Imo, it would be more ergonomic to have an equivalent to >>>>> Process.send_after for GenServer.reply. >>>>> >>>>> Example: >>>>> https://gist.github.com/khionu/7da26e1c53108ee4b462ef570f19b61b >>>> >>>> >>>>> -- >>>>> 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 [email protected]. >>>>> To view this discussion on the web visit >>>>> https://groups.google.com/d/msgid/elixir-lang-core/e4a0ef65-7075-4ffc-b5db-b5acd86365c7n%40googlegroups.com >>>>> <https://groups.google.com/d/msgid/elixir-lang-core/e4a0ef65-7075-4ffc-b5db-b5acd86365c7n%40googlegroups.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 [email protected]. >>> >> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/elixir-lang-core/db90f889-2e33-4d38-9069-7ed564cbba6dn%40googlegroups.com >>> <https://groups.google.com/d/msgid/elixir-lang-core/db90f889-2e33-4d38-9069-7ed564cbba6dn%40googlegroups.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 [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/elixir-lang-core/4082a37d-a38b-4541-9926-ef36678d526cn%40googlegroups.com > <https://groups.google.com/d/msgid/elixir-lang-core/4082a37d-a38b-4541-9926-ef36678d526cn%40googlegroups.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 [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4L%3D6y8FvnnpbSF%2BNW7L2_63_Mn6w-Pcj-Vz3VTvW%3Dpeqg%40mail.gmail.com.
