【发布时间】:2018-12-24 00:04:33
【问题描述】:
我正在尝试弄清楚如何启动一个 genserver,并等待结果直到它完成。
如何让服务器在退出时返回结果?
例如:
defmodule DistanceMatrix do
use GenServer
def start id do
GenServer.start(__MODULE__, id)
end
def load() do
GenServer.cast({:load})
end
def handle_cast({:load}, state) do
# start long process operation
long_process
{:noreply, state}
end
def long_process do
:timer.sleep 2000
%{result: "Process result.."}
end
end
results= ids
|> Enum.map(fn id -> DistanceMatrix.start(id) end)
|> Enum.map(&Task.await/1)
|> Enum.map(fn({:ok, result}) ->
result
end)
那么,我将如何等待并得到结果?
【问题讨论】:
-
如何将所有
cast更改为call并调用load而不是Task.await? -
我想同时处理所有id,我试过
call,但我得到的是顺序而不是并行处理的id。
标签: elixir gen-server