IPRBackgroundTaskRunner

namespace PRTelegramBot.BackgroundTasks.Interfaces
{
    /// <summary>
    /// Интерфейс исполнителя фоновых задач.
    /// Отвечает за запуск, остановку и управление жизненным циклом фоновых задач.
    /// </summary>
    public interface IPRBackgroundTaskRunner
    {
        /// <summary>
        /// Текущий список запущенных задач. Содержит ключ метаданных и ссылку на запущенный Task.
        /// </summary>
        IReadOnlyDictionary<Guid, IRunningBackgroundTaskData> ActiveTasks { get; }

        /// <summary>
        /// Завершенные задачи.
        /// </summary>
        IReadOnlyCollection<IRunningBackgroundTaskData> EndTasks { get; }

        /// <summary>
        /// Экземпляры задач.
        /// </summary>
        IReadOnlyCollection<IPRBackgroundTask> TaskInstance { get; }

        /// <summary>
        /// Метаданные задач.
        /// </summary>
        IReadOnlyCollection<IPRBackgroundTaskMetadata> Metadata { get; }

        /// <summary>
        /// Инициализация фоновых задач.
        /// </summary>
        /// <param name="metadata">Метаданные.</param>
        /// <param name="tasks">Фоновые задачи.</param>
        void Initialize(IEnumerable<IPRBackgroundTaskMetadata> metadata, IEnumerable<IPRBackgroundTask> tasks);

        /// <summary>
        /// Запустить фоновые задачи.
        /// </summary>
        Task StartAsync();

        /// <summary>
        /// Запустить фоновую задачу.
        /// ВАЖНО. Перед вызовом данного метода убедитесь, что метаданные либо уже загружены в раннер, либо сама задача хранит в себе метаданные. 
        /// Например через атрибут <see cref="PRBackgroundTaskAttribute"/> или реализовывает интерфейс <see cref="IPRBackgroundTaskMetadata"/>
        /// </summary>
        /// <param name="backgroundTask">Фоновая задача.</param>
        Task StartAsync(IPRBackgroundTask backgroundTask);

        /// <summary>
        /// Запустить фоновую задачу.
        /// </summary>
        /// <param name="backgroundTask">Фоновая задача.</param>
        /// <param name="metadata">Метаданные.</param>
        Task StartAsync(IPRBackgroundTask backgroundTask, IPRBackgroundTaskMetadata metadata);

        /// <summary>
        /// Останавливает выполнение всех запущенных фоновых задач.
        /// </summary>
        Task StopAsync();

        /// <summary>
        /// Останавливает выполнение указанной фоновой задачи.
        /// </summary>
        /// <param name="taskId">Идентификатор задачи.</param>
        Task StopAsync(Guid taskId);

        /// <summary>
        /// Останавливает выполнение указанной фоновой задачи.
        /// </summary>
        /// <param name="metadata">Метаданные фоновой задачи.</param>
        Task StopAsync(IPRBackgroundTaskMetadata metadata);
    }
}

Last updated