using System;
using System.Threading.Tasks;
namespace ZeroLevel.Services.Shedulling
{
    public interface IExpirationAsyncSheduller : IDisposable
    {
        /// 
        /// Добавление задачи с указанием времени по истечении которого она должна быть исполнена
        /// 
        long Push(TimeSpan timespan, Func callback);
        /// 
        /// Добавление задачи с указанием даты/времени когда она должна быть исполнена
        /// 
        long Push(DateTime date, Func callback);
        /// 
        /// Удаляет событие по его идентификатору
        /// 
        /// Идентификатор события
        bool Remove(long key);
        /// 
        /// Очистка планировщика
        /// 
        void Clean();
        /// 
        /// Приостановка работы планировщика (не препятствует добавлению новых заданий)
        /// 
        void Pause();
        /// 
        /// Возобновление работы планировщика
        /// 
        void Resume();
    }
}