2016-08-19 4 views
7

एक साधारण 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} 

बस सोच वहाँ अमृत द्वारा प्रदान की एक आसान तरीका एक GenServer प्रक्रिया के वर्तमान स्थिति प्राप्त करने के लिए है?

उत्तर

14

उपयोग :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} 
+0

धन्यवाद! दस्तावेज में मुझे कैसे याद आया! – sbs

संबंधित मुद्दे

 संबंधित मुद्दे