<rsd version="1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns="http://archipelago.phrasewise.com/rsd">
  <service>
    <engineName>MyGet</engineName>
    <engineLink>http://www.myget.org/</engineLink>
    <dc:identifier>https://www.myget.org/F/chroniton/</dc:identifier>
    <dc:owner>leosperry</dc:owner>
    <dc:creator>leosperry</dc:creator>
    <dc:title>A library for running tasks(jobs) on schedules.</dc:title>
    <dc:description>## Synopsis

A library for running tasks(jobs) on schedules. It supports:

* Strongly typed jobs
* Custom schedules
* Running jobs on multiple schedules
* Multiple jobs on a single schedule.
* Limiting the number of threads on which work is done
* Managing behaviors of jobs which run beyond their next scheduled time
* Dependency Injection initialization

## Code Example

        static void Main(string[] args)
        {
            UnityContainer container = new UnityContainer();

            container.RegisterType&lt;ISingularityFactory, SingularityFactory&gt;();

            var factory = container.Resolve&lt;ISingularityFactory&gt;();
            var singularity = factory.GetSingularity();

            var job = new SimpleParameterizedJob&lt;string&gt;(
                (parameter, scheduledTime) =&gt; Task.Run(() =&gt; 
                Console.WriteLine($"{parameter}\tscheduled: {scheduledTime.ToString("o")}")));

            var schedule = new EveryXTimeSchedule(TimeSpan.FromSeconds(1));

            var scheduledJob = singularity.ScheduleParameterizedJob(
                schedule, job, "Hello World", true); //starts immediately

            var startTime = DateTime.UtcNow.Add(TimeSpan.FromSeconds(5));

            var scheduledJob2 = singularity.ScheduleParameterizedJob(
                schedule, job, "Hello World 2", startTime);

            singularity.Start();

            Thread.Sleep(10 * 1000);

            singularity.StopScheduledJob(scheduledJob);

            Thread.Sleep(5 * 1000);

            singularity.Stop();

            Console.ReadKey();
        }

	
In the above example, here's what happens:
The first job starts immediately and print's "Hello World" once every second.
Five seconds later the second job starts and prints "Hello World2" every second.
Five seconds later the first job stops and only the second job is running.
Five seconds later, Stop() is called and the second job also stops.

## Motivation

This project was inspired for the need to have a strongly typed .NET solution for running tasks on schedules. 

## Installation

nuget instructions will go here

## Contributors

Created by : Leonard Sperry
leosperry@outlook.com

## License

Licensed under the MIT License

## Future Features

* Serialization
* More Built in Schedule types
*</dc:description>
    <homePageLink>https://www.myget.org/Feed/Details/chroniton/</homePageLink>
    <apis>
      <api name="nuget-v3-packages" blogID="" preferred="false" apiLink="https://www.myget.org/F/chroniton/api/v3/index.json" />
      <api name="nuget-v2-packages" blogID="" preferred="true" apiLink="https://www.myget.org/F/chroniton/api/v2/" />
      <api name="nuget-v1-packages" blogID="" preferred="false" apiLink="https://www.myget.org/F/chroniton/api/v1/" />
    </apis>
  </service>
</rsd>