GenServer 訊息分成兩種:
在 GenServer 裡,使用 handle_call/2
來接收 Call,與 handle_cast/2
來收 Cast
使用 handle_cast/2
callback 來處理新的 cast event
defmodule Bank do
use GenServer
def init(init_balance) do
IO.puts "開戶存了 #{init_balance} 元。"
{:ok, init_balance}
end
def handle_cast({:add, n}, balance) do
new_state = balance + n
IO.puts "存入 #{balance} 元。"
{:noreply, new_state}
end
end
接著使用 GenServer.cast/2
來呼叫他
iex(2)> {:ok, pid} = GenServer.start_link(Bank, 3000)
開戶存了 3000 元。
{:ok, #PID<0.114.0>}
iex(3)> GenServer.cast(pid, {:add, 400})
存入 3000 元。
:ok