は、実際のエージェントを使用する場合GenServerの親プロセスはどのように応答を待ちますか?
a = AAgent.start_agent
send a, {:put, :a, 42, self()}
flush
%{a: 42}
しかし、応答が呼び出し元プロセスのメールボックスに渡され、使われている公式のエリクサーガイド
defmodule AAgent do
def start_agent do
spawn_link fn -> loop(%{}) end
end
def loop(state \\ %{}) do
receive do
{:put, key, value, caller} ->
new_state = Map.put(state, key, value)
send caller, new_state
loop(new_state)
{:get, key, caller} ->
send caller, Map.get(state, key)
loop(state)
end
end
end
からのエージェントのような実装があります(内部GenServer
を使用しています)、応答が
iex> Agent.get(agent, fn list -> list end)
["eggs"]
私は、NEはありません私がエージェントを使用すると["eggs"]
を得るためにreceive
ブロックを書きました。これは、別のプロセスにデータを渡した別のプロセスであっても、すでに利用可能な結果です。裸のプロセスを使用して同じ効果を達成することは可能ですか?GenServer
はフードの下で何か他のものを使用していますか?