defmodule Slow do
use GenServer
def init(_), do: {:ok, 0}
def handle_cast(:job, longest), do: {:noreply, work(longest)}
def handle_call(:job, _from, longest), do: {:reply, :ok, work(longest)}
def handle_call(:longest, _from, longest), do: {:reply, longest, longest}
defp work(longest) do
Process.sleep(1)
{:message_queue_len, waiting} = Process.info(self(), :message_queue_len)
max(longest, waiting)
end
end