Powered by AppSignal & Oban Pro

process is sequential

livebook/sequential_process.livemd

process is sequential

Section

defmodule Server do
  def start do
    spawn(fn -> loop() end)
  end

  def send_msg(server, message) do
    send(server, {self(), message})

    receive do
      {:response, response} -> response
    end
  end

  defp loop do
    receive do
      {caller, msg} ->
        Process.sleep(1000)
        send(caller, {:response, msg})
    end

    loop()
  end
end
server = Server.start()
Enum.each(1..5, fn i ->
  spawn(fn ->
    IO.puts("Sending msg ##{i}")

    Server.send_msg(server, i)
    |> then(&IO.puts("Response: #{&1}"))
  end)
end)