无法使用自己的API在同一模块中的Genserver中调用Handle Cast函数

问题描述 投票:1回答:1

我正在尝试通过自己的API在GenServer中调用handle_cast函数。但是,似乎没有调用handle_cast函数。我放置了调试语句以了解它在哪里中断。

调试5被打印,但调试4没有被打印。

注意:done()函数正在从另一个GenServer调用。

# Public API
def done(pid) do
  GenServer.cast(__MODULE__, {:done, pid})
  IO.puts("Debug 5")
end

#Server
def handle_cast({:done, pid}, {num, startTime, nbor_map}) do
  IO.puts("Debug 4")
  if num <= 1 do
    IO.puts("Time taken:")
    end_time = System.monotonic_time(:millisecond)
    time_taken = end_time - startTime
    IO.inspect(time_taken)
    System.halt(0)
  end

  {:noreply, {num - 1, startTime, nbor_map}}
end

而且,我没有任何编译错误。有人可以建议为什么没有调用handle_cast函数或为什么没有打印“ Debug 4”吗?

elixir gen-server
1个回答
0
投票

您的start_link应该看起来像

  def start_link(opts) do
    GenServer.start_link(__MODULE__, opts, name: __MODULE__)
  end

名称:选项用于name registration of the server

© www.soinside.com 2019 - 2024. All rights reserved.