Exemple #1
0
        /// <summary>
        /// загрузка расписания
        /// </summary>
        public async Task ReloadSchedule(int taskID)
        {
            using (var scope = _rootServices.CreateScope())
            {
                var provider = scope.ServiceProvider;
                using (TransactionScope transactionScope = new TransactionScope(TransactionScopeOption.Suppress, TimeSpan.FromSeconds(30), TransactionScopeAsyncFlowOption.Enabled))
                {
                    var database = provider.GetRequiredService <SSSBDbContext>();

                    var task = await database.OnDemandTask.Include(t => t.Shedule).Where(t => t.OnDemandTaskId == taskID).SingleOrDefaultAsync();

                    if (task == null || !(task.Active == true) || task.Shedule == null)
                    {
                        UnLoadSchedule(taskID);
                        return;
                    }

                    lock (BaseSheduleTimer.Timers)
                    {
                        UnLoadSchedule(taskID);

                        if (task.Shedule.Active == true)
                        {
                            BaseSheduleTimer timer = new ScheduleTimer(this, task.OnDemandTaskId, task.Shedule.Interval);
                            timer.Start();
                        }
                    }
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// загрузка расписаний
        /// </summary>
        public async Task LoadSchedules()
        {
            using (var scope = _rootServices.CreateScope())
            {
                var provider = scope.ServiceProvider;
                using (TransactionScope transactionScope = new TransactionScope(TransactionScopeOption.Suppress, TimeSpan.FromSeconds(30), TransactionScopeAsyncFlowOption.Enabled))
                {
                    var database = provider.GetRequiredService <SSSBDbContext>();
                    // all tasks which have schedules
                    var tasks = await(from task in database.OnDemandTask.Include(t => t.Shedule)
                                      where task.Active == true && task.SheduleId != null
                                      select task).ToListAsync();

                    lock (BaseSheduleTimer.Timers)
                    {
                        foreach (var task in tasks)
                        {
                            if (task.Shedule.Active == true)
                            {
                                BaseSheduleTimer timer = new ScheduleTimer(this, task.OnDemandTaskId, task.Shedule.Interval);
                                timer.Start();
                            }
                        }
                    }
                }
            }
        }