Just freehand but you may want to try something like this:
def task_fun(:store, event),
do: store(event)
def task_fun(:publish, event),
do: publish(event)
def run_tasks(event) do
# blocks until list is reified
# :max_concurrency defaults to System.schedulers_online/0
MyApp.TaskSupervisor
|> Task.Supervisor.async_stream_nolink([:store, :publish], __MODULE__, :task_fun, [event], [])
|> Enum.to_list()
end
def handle_in(message, payload, socket) do
event = build_event(message, payload, socket)
# blocks until done
run_tasks(event)
{:reply, :ok, socket}
end
And just as reference for the topic as a whole:


















