每次在数据库中创建特定对象时,都会触发此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是否仍然保持计时器运行?