.NET 全能 Cron 表达式解析库,支持 Cron 所有特性.
Install-Package TimeCrontab
dotnet add package TimeCrontab
На нашей главной странице (https://gitee.com/dotnetchina/TimeCrontab/samples) есть много примеров, вот один из них:
Обычный формат: час минута день месяц неделя
var crontab = Crontab.Parse("* * * * *");
var nextOccurrence = crontab.GetNextOccurrence(DateTime.Now);
Поддержка года: час минута день месяц неделя год
var crontab = Crontab.Parse("* * * * * *", CronStringFormat.WithYears);
var nextOccurrence = crontab.GetNextOccurrence(DateTime.Now);
Поддержка секунд: секунда минута час день месяц неделя
var crontab = Crontab.Parse("* * * * * *", CronStringFormat.WithSeconds);
var nextOccurrence = crontab.GetNextOccurrence(DateTime.Now);
Поддержка секунд и лет: секунда минута час день месяц неделя год
var crontab = Crontab.Parse("* * * * * * *", CronStringFormat.WithSecondsAndYears);
var nextOccurrence = crontab.GetNextOccurrence(DateTime.Now);
Получение времени ожидания для реализации простой периодической задачи
// Блокирующий способ
var crontab = Crontab.Parse("* * * * * *", CronStringFormat.WithSeconds);
while(true)
{
Thread.Sleep(crontab.GetSleepMilliseconds(DateTime.Now));
Console.WriteLine(DateTime.Now.ToString("G"));
}
// Неблокирующий способ
var crontab = Crontab.Parse("* * * * * *", CronStringFormat.WithSeconds);
Task.Factory.StartNew(async () =>
{
while (true)
{
await Task.Delay(crontab.GetSleepMilliseconds(DateTime.Now));
Console.WriteLine(DateTime.Now.ToString("G"));
}
}, TaskCreationOptions.LongRunning);
BackgroundService
реализация простой периодической задачи
using TimeCrontab;
namespace WorkerService;
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
private readonly Crontab _crontab;
public Worker(ILogger<Worker> logger)
{
_logger = logger;
_crontab = Crontab.Parse("* * * * * *", CronStringFormat.WithSeconds);
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
var taskFactory = new TaskFactory(System.Threading.Tasks.TaskScheduler.Current);
await taskFactory.StartNew(async () =>
{
// Ваш бизнес-код здесь
_logger.LogInformation("Worker running at: {time}", DateTime.Now);
await Task.CompletedTask;
}, stoppingToken);
await Task.Delay(_crontab.GetSleepMilliseconds(DateTime.Now), stoppingToken);
}
}
}
Макро-идентификаторы
// Макро-строка
var secondly = Crontab.Parse("@secondly"); // Каждые секунды
var minutely = Crontab.Parse("@minutely"); // Каждую минуту
var hourly = Crontab.Parse("@hourly"); // Каждый час
var daily = Crontab.Parse("@daily"); // Каждый день в 00:00:00
var monthly = Crontab.Parse("@monthly"); // Каждый месяц 1 числа в 00:00:00
var weekly = Crontab.Parse("@weekly"); // Каждую неделю в воскресенье в 00:00:00
var yearly = Crontab.Parse("@yearly"); // Каждый год 1 января в 00:00:00
var workday = Crontab.Parse("@workday"); // Каждую неделю с понедельника по пятницу в 00:00:00
// Статические свойства
var secondly = Crontab.Secondly; // Каждые секунды
var minutely = Crontab.Minutely; // Каждую минуту
var hourly = Crontab.Hourly; // Каждый час
var daily = Crontab.Daily; // Каждый день в 00:00:00
var monthly = Crontab.Monthly; // Каждый месяц 1 числа в 00:00:00
var weekly = Crontab.Weekly; // Каждую неделю в воскресенье в 00:00:00
var yearly = Crontab.Yearly; // Каждый год 1 января в 00:00:00
var workday = Crontab.Workday; // Каждую неделю с понедельника по пятницу в 00:00:00 ```
Crontab.SecondlyAt(3); // каждые 3 секунды
var crontab = Crontab.SecondlyAt(3, 5, 6);
// каждые 3, 5 и 6 секунд
var crontab = Crontab.MinutelyAt(3); // каждую минуту в 0:03
var crontab = Crontab.MinutelyAt(3, 5, 6); // каждую минуту в 0:03, 0:05 и 0:06
// каждую минуту в 3-ю, 5-ю и 6-ю минуты
var crontab = Crontab.HourlyAt(3); // каждый час в 0:03
var crontab = Crontab.HourlyAt(3, 5, 6); // каждый час в 0:03, 0:05 и 0:06
// каждый час в 3-ю, 5-ю и 6-ю минуту
var crontab = Crontab.DailyAt(3); // каждый день в 03:00
var crontab = Crontab.DailyAt(3, 5, 6); // каждый день в 03:00, 05:00 и 06:00
// каждый день в 3 часа, 5 часов и 6 часов
var crontab = Crontab.MonthlyAt(3); // каждый месяц в 00:00 третьего числа
var crontab = Crontab.MonthlyAt(3, 5, 6); // каждый месяц в 00:00 третьего, пятого и шестого числа
// каждый месяц в 00:00 третьего, пятого и шестого дня
var crontab = Crontab.WeeklyAt(3); // каждую неделю в 00:00 в среду
var crontab = Crontab.WeeklyAt("WED"); // в среду (SUN — воскресенье, MON — понедельник, TUE — вторник, WED — среда, THU — четверг, FRI — пятница, SAT — суббота)
var crontab = Crontab.WeeklyAt(3, "FRI", 6); // каждую неделю в 00:00 в среду, пятницу и 06:00
// каждую неделю в 00:00 в третий день недели, в пятницу и в 06:00
var crontab = Crontab.YearlyAt(3); // каждый год в 00:00 первого марта
var crontab = Crontab.YearlyAt("MAR"); // в январе (JAN), феврале (FEB), марте (MAR), апреле (APR), мае (MAY), июне (JUN), июле (JUL), августе (AUG), сентябре (SEP), октябре (OCT), ноябре (NOV) и декабре (DEC)
var crontab = Crontab.YearlyAt(3, 5, 6); // каждый год в 00:00 первого марта, пятого числа и 06:00
var crontab = Crontab.YearlyAt("MAR", "MAY", "JUN"); // каждый год в 00:00 первого марта, первого мая и первого июня
// каждый год в 00:00 первого марта, первого мая и первого июня
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )