using System; using System.Threading; using System.Threading.Tasks; namespace AsbCloudInfrastructure.Background { /// /// Класс разовой работы. /// Разовая работа приоритетнее периодической. /// public class WorkBase { /// /// Идентификатор работы. Должен быть уникальным. Используется в логах и передается в колбэки. /// public string Id { get; private set; } /// /// Делегат работы. /// /// Параметры: /// /// /// string /// Id Идентификатор работы /// /// /// IServiceProvider /// Поставщик сервисов /// /// /// CancellationToken /// Токен отмены задачи /// /// /// /// internal Func ActionAsync { get; set; } /// /// Делегат обработки ошибки. /// Не должен выполняться долго. /// public Func? OnErrorAsync { get; set; } /// /// максимально допустимое время выполнения работы /// public TimeSpan Timeout { get; set; } = TimeSpan.FromMinutes(1); /// /// Фактическое время успешного выполнения работы /// public TimeSpan? ExecutionTime { get; internal set; } /// /// Время последнего запуска /// public DateTime LastStart { get; set; } public WorkBase(string id, Func actionAsync) { Id = id; ActionAsync = actionAsync; } } }