2022-12-02 14:45:20 +05:00
|
|
|
|
using System;
|
|
|
|
|
using System.Threading;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
|
|
|
|
namespace AsbCloudInfrastructure.Background
|
|
|
|
|
{
|
2023-04-18 16:22:53 +05:00
|
|
|
|
|
2022-12-02 14:45:20 +05:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Класс периодической работы.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public class WorkPeriodic : WorkBase
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Период выполнения задачи
|
|
|
|
|
/// </summary>
|
|
|
|
|
public TimeSpan Period { get; set; }
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Время следующего запуска
|
|
|
|
|
/// </summary>
|
2023-10-08 19:45:21 +05:00
|
|
|
|
public DateTime NextStart
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
var lastStart = LastComplete?.Start ?? DateTime.MinValue;
|
|
|
|
|
if (LastError?.Start > lastStart)
|
|
|
|
|
lastStart = LastError.Start;
|
|
|
|
|
return lastStart + Period;
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-12-02 14:45:20 +05:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Класс периодической работы
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="id">Идентификатор работы. Должен быть уникальным. Используется в логах и передается в колбэки</param>
|
|
|
|
|
/// <param name="actionAsync">Делегат работы</param>
|
|
|
|
|
/// <param name="period">Период выполнения задачи</param>
|
2023-10-08 19:45:21 +05:00
|
|
|
|
public WorkPeriodic(string id, Func<string, IServiceProvider, Action<string, double?>, CancellationToken, Task> actionAsync, TimeSpan period)
|
2022-12-02 14:45:20 +05:00
|
|
|
|
: base(id, actionAsync)
|
|
|
|
|
{
|
|
|
|
|
Period = period;
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-04-18 16:22:53 +05:00
|
|
|
|
|
2022-12-02 14:45:20 +05:00
|
|
|
|
}
|