【问题标题】:Unable to call Handle Cast function in a Genserver from the same module using it's own API无法使用自己的 API 从同一模块调用 Genserver 中的 Handle Cast 函数
【发布时间】:2020-01-30 06:57:40
【问题描述】:

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

Debug 5 被打印,但 Debug 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 函数或为什么没有打印“调试 4”吗?

【问题讨论】:

  • 请说明您是如何启动该进程的(GenServer.start_link 电话或类似。)您似乎没有为该进程指定名称。

标签: elixir gen-server


【解决方案1】:

您的 start_link 应该类似于

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 2023-03-12
    • 2019-05-08
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多