using System; namespace AsbCloudInfrastructure.Background; /// <summary> /// Класс периодической работы. /// </summary> public class WorkPeriodic { public Work Work { get; } /// <summary> /// Период выполнения задачи /// </summary> public TimeSpan Period { get; set; } /// <summary> /// Время следующего запуска /// </summary> public DateTime NextStart { get { var lastStart = Work.LastComplete?.Start ?? DateTime.MinValue; if (Work.LastError?.Start > lastStart) lastStart = Work.LastError.Start; return lastStart + Period; } } /// <summary> /// Класс периодической работы /// </summary> /// <param name="id">Идентификатор работы. Должен быть уникальным. Используется в логах и передается в колбэки</param> /// <param name="actionAsync">Делегат работы</param> /// <param name="period">Период выполнения задачи</param> public WorkPeriodic(Work work, TimeSpan period) { Work = work; Period = period; } }