Невозможно вызвать функцию Handle Cast в Genserver из того же модуля, используя собственный API - PullRequest
1 голос
/ 01 октября 2019

Я пытаюсь вызвать функцию handle_cast в GenServer из своего собственного API. Однако функция handle_cast, похоже, не вызывается. Я поместил отладочные операторы, чтобы понять, где они ломаются.

Отладка 5 печатается, но отладка 4 не печатается.

Примечание: функция done() вызывается из другого GenServer.

# Public API
def done(pid) do
  GenServer.cast(__MODULE__, {:done, pid})
  IO.puts("Debug 5")
end

#Server
def handle_cast({:done, pid}, {num, startTime, nbor_map}) do
  IO.puts("Debug 4")
  if num <= 1 do
    IO.puts("Time taken:")
    end_time = System.monotonic_time(:millisecond)
    time_taken = end_time - startTime
    IO.inspect(time_taken)
    System.halt(0)
  end

  {:noreply, {num - 1, startTime, nbor_map}}
end

Кроме того, я не получаю никаких ошибок компиляции. Может кто-нибудь подсказать, почему не вызывается функция handle_cast или почему не печатается «Debug 4»?

1 Ответ

0 голосов
/ 10 октября 2019

Ваша стартовая ссылка должна выглядеть примерно так:

  def start_link(opts) do
    GenServer.start_link(__MODULE__, opts, name: __MODULE__)
  end

Параметр name: предназначен для регистрации имени сервера .

...