Это требование.Планирование работы в .NET с использованием потоков и таймеров
У меня есть работа/задача, которая принимает один параметр в качестве входных данных и выполняет некоторую функцию.
Мне нужно выполнить метод DoWork при разных таймингах расписания с разными входными параметрами. Допустим, в 13:00, DoWork должен быть запущен с помощью input1. в 13:30, DoWork должен запускаться с input2. в 3 часа дня, DoWork должен запускаться с вводом3. ....
Какой лучший способ сделать это? - Использование System.Timer - Использование System.Threading.Timer - Использование TaskFactory & TaskScheduler
Все, что я пытался до сих пор, в первую очередь есть службы Windows:
public partial class MainJobExecWS : ServiceBase
{
private Timer taskTimer;
public MainJobExecWS()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
// Define Timer for MainJob
TimeSpan dueTime = // define starting time of timer;
TimeSpan repeatingPeriod = // define repeating interval of timer;
MainJob jm = new MainJob();
TimerCallback tcb = jm.executeMainJob;
taskTimer = new Timer(tcb, null, dueTime, repeatingPeriod);
base.OnStart(args);
}
protected override void OnStop()
{
if (taskTimer != null)
{
taskTimer.Dispose();
}
base.OnStop();
}
}
Определение для Main Работа:
class MainJob
{
public void executeMainJob(object state)
{
// Main Job Definition
}
private void scheduleChildJob()
{
String childJobInput = "abc"; // How to pass this input to the child job????
TimeSpan execTimeSpan = // define the timespan for triggering child job;
ChildJobDef chdJob = new ChildJobDef();
TimerCallback tcb = chdJob.executeChildJob;
Timer timer = new Timer(tcb, null, execTimeSpan, ?); // How to specify that the child job should be triggered only once??
}
}
И, наконец, определение определение Ребенка работы:
class ChildJobDef
{
public void executeChildJob(object state)
{
// How to get the input sent to this job???
}
}
Можете ли вы показать нам, что вы делали до сих пор? Каков ваш первоначальный дизайн? – user2942249
Мой первоначальный дизайн был полностью основан на Quartz.NET, но по некоторым внутренним причинам мне пришлось покинуть Quartz. – wesfaith
Я отредактировал свой вопрос, чтобы отобразить основной подход. – wesfaith