无法使用自己的 API 从同一模块调用 Genserver 中的句柄强制转换函数



我正在尝试从GenServer自己的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函数或为什么没有打印"调试4"吗?

您的start_link应该看起来像

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

name: 选项用于服务器的名称注册。

最新更新