我知道我可以这样称呼GenServer
GenServer.call(pid, request)
# using a pid
或像这样
GenServer.call(registered_name, request)
# if I registered the process with a name
但是有没有办法在不知道pid/注册名称的情况下在模块内部执行
GenServer.call
?(即是否有类似GenServer.call(__CURRENT_PROCESS__, request)
的东西?) 最佳答案
这根本行不通。 GenServer.call
只是向给定进程发送一条消息,然后等待另一条消息(答复),从而阻止当前进程。如果您通过这种方式将消息发送到self
,则该进程将无法自由处理该消息,因为它将被阻止等待回复。因此,call
将始终超时。
我怀疑您需要的只是将所需的功能提取到功能中并直接调用它。或者,您可以将cast
发送到当前进程,以有效地告诉它执行“稍后”的操作。
关于elixir - 如何在GenServer中执行对当前进程的调用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35364843/