首页 > 解决方案 > 为什么 Erlang/OTP gen_server 回调模块必须提供 handle_cast 函数?

问题描述

我可以理解为什么回调模块必须提供inithandle_call功能。init用于创建初始状态,并且handle_call是创建服务器进程的主要目的:服务请求。

但我不明白为什么handle_cast需要。模块不能gen_server像许多其他回调一样提供默认实现吗?这可能是一个 noop 像

handle_cast(_, State) -> {noreply, State}.

在我看来,大多数回调模块无论如何都提供像这样的 noops。

标签: erlangerlang-otpgen-server

解决方案


handle_cast与 类似handle_call,用于对您正在运行的 gen_server 的异步调用(调用是同步的)。它正在为您处理请求,而不是像那样回复call

与此类似,gen_call它可以更改您的 gen_server 的状态(或保持原样,取决于您的需要和实施)。它还可以像您的呼叫一样停止您的服务器、休眠等 - 请参阅学习一些 erlang以获取示例和更广泛的解释。

正如您在问题中所说,它“可能是一个问题”,但在某些情况下,最好实现和处理对服务器的异步调用。


推荐阅读