Elixir 为什么我得到**(退出)错误的返回值::ok

Elixir 为什么我得到**(退出)错误的返回值::ok,elixir,Elixir,我需要让GenServer监视任务,因此,我需要: GenServer.call(server_pid, {:monitor_task, self()}) 在服务器中: def handle_call({:monitor_task, task_pid}, _from, state) do ref = Process.monitor(task_pid) {:reply, ref, state} end 但是,我得到一个错误: ** (stop) exited in: GenServer

我需要让
GenServer
监视任务,因此,我需要:

GenServer.call(server_pid, {:monitor_task, self()})
在服务器中:

def handle_call({:monitor_task, task_pid}, _from, state) do
  ref = Process.monitor(task_pid)
  {:reply, ref, state}
end
但是,我得到一个错误:

** (stop) exited in: GenServer.call(#PID<0.768.0>, {:monitor_task, #PID<0.849.0>}, 5000)
    ** (EXIT) bad return value: :ok
**(stop)已退出:GenServer.call(#PID,{:monitor_task,#PID},5000)
**(退出)错误的返回值::确定

有什么想法吗?

调用Logger的
句柄信息回调需要返回
{:noreply,state}
{:stop,reason,state}
,但是对Logger的调用返回
:ok
,这是回调的无效返回值,这就是您看到的错误的原因。

我将您的代码复制到一个新的GenServer中,它工作正常。你能发布引发该错误的全部代码吗?在那里,只需搜索:monitor_Task,你能添加完整的错误消息(带有stacktrace)吗?请检查上面的要点下的注释。它看起来正常吗?肯定是这个问题的正确答案。对于其他来到这里的人:我有相同的错误消息,但对我来说问题是,我忘记了在回复时返回状态。到目前为止,我返回了
{:reply,return\u value}
,而我本应该在handle\u调用实现的最后一行返回
{:reply,return\u value,state}