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