【问题标题】:Elixir GenServer handle_call callback return typeElixir GenServer handle_call 回调返回类型
【发布时间】:2019-03-27 17:03:30
【问题描述】:

我正在实现 GenServer,但我很困惑。

我知道handle_cast 是异步的,这意味着调用者不等待回复,我们返回一个像这样的元组:{:noreply, new_state}

我注意到我们也可以从handle_call 返回相同的元组。这是否意味着如果我有一个返回{:noreply, new_state}handle_call,它不会返回任何东西但会是同步的?调用者的流程会等待GenServer.call 命令,然后在handle_call 函数完成后继续?

【问题讨论】:

标签: elixir gen-server


【解决方案1】:

调用者将阻止等待回复whenever 您调用 GenServer.call。 handle_call 接受 {:noreply, state} 作为有效返回的原因是允许您手动(从任何地方)reply/2

调用进程将阻止等待reply(并根据您的设置等超时),同样如此。

handle_callback 的第二个参数是from 引用,如handle_call(msg, from, state),然后可以与reply/2 一起使用。

【讨论】:

    猜你喜欢
    • 2019-12-17
    • 2021-03-03
    • 2018-01-13
    • 2016-08-27
    • 2019-12-14
    • 2018-12-14
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多