Задача API планировщика


Я спец написала в API для планировщика задач, и я буду благодарен за ваши мысли. Вот что я получил до сих пор:

public void Configure(Context ctx) {
    // Single tasks
    ctx.Run(() => Tasks.First()).Every.Midnight;
    ctx.Run(() => Tasks.Second()).Every.Day(8,0));

    // Multiple tasks
    ctx.Run(() => {
        Tasks.Third();
        Tasks.Fourth();
    }).Every.Day(8,0);

   // Triggers:
   ..Every.Hour(20/*Minute*/);
   ..Every.Minute(10/*Second*/);
   ..Every.Second();
}

Run метод принимает параметр действия.

Очевидно, мне нужно поддерживать пользовательские триггеры позволяют пользователям настраивать ее именно так, как они хотят. Это может быть сделано путем реализации интерфейса, таких как:

interface ITask {
    bool ShouldRun(DateTime currentDate);
}


2031
4
задан 11 августа 2011 в 08:08 Источник Поделиться
Комментарии
2 ответа

Вместо прокатки свой собственный API для повторения, я бы принять терминологию и семантику правил в RFC 5545, который широко используется в Календаря приложения

Раздел 3.8.5.3 тщательно документирует синтаксис и правила поведения (повторение правила). Они похожи


RRULE:FREQ=WEEKLY;COUNT=10;WKST=SU;BYDAY=TU,TH

что означает


Еженедельно по вторникам и четвергам в течение пяти недель:

поэтому вы могли бы реализовать эту семантику (или найти существующую библиотеку в RFC 5545 что это) и ваш API может выглядеть очень похож на синтаксис с правилом:

ctx.Run(...).Freq(WEEKLY).Count(10).ByDay(TU, TH)

2
ответ дан 12 августа 2011 в 10:08 Источник Поделиться

Я хочу быть в состоянии использовать функциональный подход для работы с API. Возможно, я новый разработчик и не понимаю лямбды. Дай мне возможность уйти.

ctx.Run(//Task, or List of tasks,  //How often, //Time to start, //Possible skip conditions - maybe skip weekends);

//Utilize enums that they can use
ctx.Run(Task.First(), Frequency.Daily, Time.Midnight);

//or pass a list of tasks perhaps
List<Task> tasks;
ctx.Run(tasks, Frequency.Hourly, Time.Custom(hour, min, sec), Time.Weekends);

0
ответ дан 12 августа 2011 в 02:08 Источник Поделиться