using System; using System.Threading.Tasks; namespace ZeroLevel.Services.Shedulling { public interface IAsyncSheduller : IDisposable { #region One time events long RemindAsyncAfter(TimeSpan timespan, Func callback); long RemindAsyncAt(DateTime date, Func callback); #endregion #region Repitable behaviour /// /// Исполняет действие раз в период, при этом период перерасчитывается по переданной функции при каждом пересоздании задачи /// /// Функция для расчета следующего периода /// Действие /// Идентификатор задания long RemindAsyncEveryNonlinearPeriod(Func nextEventPeriodCalcFunction, Func callback, bool breakWherError = false); /// /// Исполняет действие раз в период, при этом период перерасчитывается по переданной функции при каждом пересоздании задачи /// /// Функция для расчета периода до первого исполнения /// Функция для расчета периода до последующих исполнений /// Действие /// Идентификатор задания long RemindAsyncEveryNonlinearPeriod(Func firstEventPeriodCalcFunction, Func nextEventPeriodCalcFunction, Func callback, bool breakWherError = false); /// /// Исполняет действие раз в период, при этом дата перерасчитывается по переданной функции при каждом пересоздании задачи /// /// Функция для расчета следующей даты /// Действие /// Идентификатор задания long RemindAsyncEveryNonlinearDate(Func nextEventDateCalcFunction, Func callback, bool breakWherError = false); long RemindAsyncEveryNonlinearDate(DateTime firstTime, Func nextEventDateCalcFunction, Func callback, bool breakWherError = false); /// /// Исполняет действие раз в период, при этом дата перерасчитывается по переданной функции при каждом пересоздании задачи /// /// Функция для расчет даты первого запуска /// Функция для расчета следующей даты /// Действие /// Идентификатор задания long RemindAsyncEveryNonlinearDate(Func firstEventDateCalcFunction, Func nextEventDateCalcFunction, Func callback, bool breakWherError = false); /// /// Исполняет действие раз в указанный период /// /// Период /// Действие /// Идентификатор задания long RemindAsyncEvery(TimeSpan timespan, Func callback, bool breakWherError = false); /// /// Исполняет действие раз в указанный период /// /// Период до первого выполнения /// Период /// Действие /// Идентификатор задания long RemindAsyncEvery(TimeSpan first, TimeSpan next, Func callback, bool breakWherError = false); long RemindAsyncWhile(TimeSpan period, Func> callback, Action continueWith = null, bool breakWherError = false); #endregion #region Sheduller control void Pause(); void Resume(); void Clean(); bool Remove(long key); #endregion } }