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;
}
}
}