1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/dotnetchina-TimeCrontab

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 7.7 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 01.12.2024 04:40 218be79

TimeCrontab

.NET 全能 Cron 表达式解析库,支持 Cron 所有特性.

特性

  • Поддержка Cron всех особенностей.
  • Сверхвысокая производительность.
  • Лёгкость расширения.
  • Небольшой размер, всего 4 КБ.
  • Отсутствие сторонних зависимостей.
  • Кроссплатформенность.
  • Высококачественный код и хорошее модульное тестирование.
  • Поддерживает .NET Framework 3.5+ и последующие версии.

Установка

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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/dotnetchina-TimeCrontab.git
git@api.gitlife.ru:oschina-mirror/dotnetchina-TimeCrontab.git
oschina-mirror
dotnetchina-TimeCrontab
dotnetchina-TimeCrontab
net6