如何处理?错误:服务器关闭时Process.send_after()

时间:2018-01-22 15:49:52

标签: elixir phoenix-framework

每次在数据库中创建特定对象时,都会触发此GenServer。

GENSERVER:

defmodule Statcasters.Jobs.DisableQuestionPrediction do
  use GenServer

  def start_link do
    GenServer.start_link(__MODULE__, %{})
  end

  def init(question) do
    schedule_work(question)

    {:ok, question}
  end

  def handle_info(:work, question) do
    {:ok, question} = question

    Statcasters.Scheduler.disable_question_prediction(question)
    {:noreply, question}
  end

  defp schedule_work(question) do
    {:ok, question} = question
    schedule = Timex.diff(DateTime.utc_now, question.game_time, :milliseconds)

    Process.send_after(self(), :work, schedule)
  end
end


基本上我将调度一个函数以便将来运行。这个功能可以定时在未来运行1小时或12小时,但我意识到如果服务器因任何原因关闭,那么此功能的时间现在可能已经关闭,这会破坏整个过程。

如何使用Elixir处理错误?即使服务器关闭,GenServer是否仍然保持计时器运行?

0 个答案:

没有答案