Слияние кода завершено, страница обновится автоматически
Кварцевый таймер помогает классу Web.Util.QuartzHelper.cs. Есть два способа использования таймера: в качестве сервиса и не как сервис.
/// <summary>
/// Класс службы таймера DisallowConcurrentExecution, это свойство может предотвратить одновременное выполнение заданий Quartz.NET
/// </summary>
[DisallowConcurrentExecution]
public class TimerDemo1Job : IJob, IJobProvider
{
private List<JobSchedule> jobs = new List<JobSchedule>();
//Шаг 2: система вызывает этот метод для получения списка задач
public List<JobSchedule> Jobs()
{
return jobs;
}
//Первый шаг: система вызывает этот метод для инициализации списка задач
public void Init()
{
var obj={From_time=время начала,……}
//время начала
var start_time = obj.From_time - new TimeSpan(0, 20, 0);
var start_h = start_time.Hours;
var start_m = start_time.Minutes;
var cron = $"0 {start_m} {start_h} * * ?";
//время окончания
//var end_time = obj.From_time + new TimeSpan(0, 10, 0);
//Передача данных в задачу выполнения
Dictionary<string, object> data = new Dictionary<string, object>();
data.Add("expire", 30 * 60);
data.Add("taskName", "Задача тестирования 1");
//NLogHelper.logger.Info($"Публикация задачи таймера: начало{start_h}:{start_m}, выражение cron:{cron}");
Console.WriteLine($"Публикация задачи таймера: начало{start_h}:{start_m}, выражение cron:{cron}");
//Добавить в список задач
this.jobs.Add(new JobSchedule(name: "TimerDemo1Job", jobType: typeof(TimerDemo1Job), cronExpression: cron, data: data));
}
//Можно разместить другие бизнес-объекты
//public IStudentBll bll { get; set; }
//public IClassScheduleBll classScheduleBll { get; set; }
public IClaimsAccessor MyUser { get; set; }
//Третий шаг: система вызывает этот метод для выполнения задачи таймера (метод обратного вызова)
public Task Execute(IJobExecutionContext context)
{
return Task.Run(() =>
{
//Получить данные data, переданные в исходную задачу через context.JobDetail.JobDataMap
var expire = context.JobDetail.JobDataMap.GetInt("expire");
var taskName = context.JobDetail.JobDataMap.GetString("taskName");
//var classSchedules = classScheduleBll.SelectAll(o => o.TimeTableSn == timetable_sn && o.Date == DateTime.Now.Date);
Console.WriteLine($"Выполнение запуска задачи таймера:" +taskName);
});
}
}
//время начала
var start_time = obj.From_time - new TimeSpan(0, offset, 0);
var start_h = start_time.Hours;
var start_m = start_time.Minutes;
var cors = $"1 {start_m} {start_h} * * ?";
//Передача данных в задачу выполнения
Dictionary<string, object> data = new Dictionary<string, object>();
data.Add("expire", during * 60);
data.Add("taskName", "Задача тестирования 2");
//NLogHelper.logger.Info($"Опубликовать задачу таймера: начать{start_h}:{start_m}, cors:{cors}");
Console.WriteLine($"Опубликовать задачу таймера: начать{start_h}:{start_m}, cors:{cors}");
//Добавить задачу, которая будет выполнена в определённый момент времени
QuartzHelper.AddAt(typeof(StartTimerClockJob), new JobKey($"TimerClock{obj.Sn}", "TimerClock"), cors, data);
//Класс задачи таймера
[DisallowConcurrentExecution]
public class StartTimerClockJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
return Task.Run(() =>
{
var expire = context.JobDetail.JobDataMap.GetInt("expire");
var taskName = context.JobDetail.JobDataMap.GetString("taskName");
Console.WriteLine($"Выполнить запуск задачи таймера:" +taskName);
});
}
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )