【问题标题】:Does Elixir provide an easier way to get a GenServer process's current state?Elixir 是否提供了一种更简单的方法来获取 GenServer 进程的当前状态?
【发布时间】:2016-12-26 05:00:03
【问题描述】:

给定一个简单的GenServer 进程。

defmodule KVServer do
  use GenServer

  def start do
    GenServer.start(__MODULE__, %{}, name: :kv_server)
  end

  def store(k, v) do
    GenServer.cast(:kv_server, {:store, k, v})
  end

  def handle_cast({:store, k, v}, state) do
    {:noreply, Map.put(state, k, v)}
  end
end

我可以使用:sys.get_status/1获取当前进程状态

iex(1)> {:ok, pid} = KVServer.start
{:ok, #PID<0.119.0>}
iex(2)> KVServer.store(:a, 1)
:ok
iex(3)> KVServer.store(:b, 2)
:ok
iex(4)> {_,_,_,[_,_,_,_,[_,_,{_,[{_,state}]}]]} = :sys.get_status(pid)
...
iex(5)> state
%{a: 1, b: 2}

只是想知道 Elixir 是否提供了一种更简单的方法来获取 GenServer 进程的当前状态?

【问题讨论】:

    标签: elixir gen-server


    【解决方案1】:

    使用:sys.get_state/1:

    iex(1)> {:ok, pid} = KVServer.start
    {:ok, #PID<0.86.0>}
    iex(2)> KVServer.store(:a, 1)
    :ok
    iex(3)> KVServer.store(:b, 2)
    :ok
    iex(4)> :sys.get_state(pid)
    %{a: 1, b: 2}
    

    【讨论】:

    • 谢谢!我是如何在文档中错过的!
    猜你喜欢
    • 1970-01-01
    • 2020-11-17
    • 2016-03-14
    • 2020-08-30
    • 2011-01-07
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    相关资源
    最近更新 更多