Skip to content

Allows you to run a set of tasks with a specified period and in one thread. They will be thread safe to each other.

License

Notifications You must be signed in to change notification settings

Rubius/TimerJobScheduler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Timer job scheduler

Allows you to run a set of tasks with a specified period and in one thread. They will be thread safe to each other.

Небольшая библиотека, позволяющая выполнять набор задач пользователя в едином потоке диспетчера задач. Все методы вызываемые из этих задач будут гарантированно потокобезопасными по отношению друг к другу.

Пример использования:

static void Main(string[] args)
{
    int cnt1 = 0;
    int cnt2 = 0;

    var job1 = new TimerJob(() => Func("Job1", ref cnt1), 0.5);
    var job2 = new TimerJob(() => Func("Job2", ref cnt2), 1.0);

    var scheduler = new TimerJobScheduler();
    scheduler.ThrowJobException(false);

    scheduler.AddJob(job1);
    scheduler.AddJob(job2);
    scheduler.Start();

    Console.ReadKey();
    Console.WriteLine($"cnt1: {cnt1};  cnt2: {cnt2};");
}

static void Func(string job, ref int cnt)
{
    Console.WriteLine(job);
    cnt++;
}

Возможно добавление произвольного количества диспетчеров и задач в них. Возможно логирование исключений, возникающих в задачах, для этого нужно передать логгер в конструктор диспетчера:

public TimerJobScheduler(ILogger logger)

При помощи метода диспетчера:

public void ThrowJobException(bool enable)

возможно разрешение или запрет дальнейшей передачи исключений от задач в систему. Получить объект System.Task планировщика, в котором выполняются пользовательские задачи, можно через метод:

public Task Task { get; }

Подробнее о библиотеке смотри: Example, Tests.

About

Allows you to run a set of tasks with a specified period and in one thread. They will be thread safe to each other.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages