Current section

Files

Jump to
sched_ex lib sched_ex.ex
Raw

lib/sched_ex.ex

defmodule SchedEx do
@moduledoc """
SchedEx schedules 'jobs' (either m,f,a tuples or functions) to run in the future.
"""
@doc """
Runs the given module, function and argument tuple at the given time
"""
def run_at(m, f, a, %DateTime{} = time) when is_atom(m) and is_atom(f) and is_list(a) do
run_at(fn -> apply(m,f,a) end, time)
end
@doc """
Runs the given function at the given time
"""
def run_at(func, %DateTime{} = time) when is_function(func) do
delay = DateTime.diff(time, DateTime.utc_now(), :millisecond)
run_in(func, delay)
end
@doc """
Runs the given module, function and argument tuple in given number of milliseconds
"""
def run_in(m, f, a, delay, opts \\ []) when is_atom(m) and is_atom(f) and is_list(a) do
run_in(fn -> apply(m,f,a) end, delay, opts)
end
@doc """
Runs the given function in given number of milliseconds
"""
def run_in(func, delay, opts \\ []) when is_function(func) and is_integer(delay) do
SchedEx.Runner.run_in(func, delay, opts)
end
@doc """
Cancels the given scheduled job
"""
def cancel(token) do
SchedEx.Runner.cancel(token)
end
end