我知道我可以这样称呼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/

10-10 13:22