public void SyncTask(ISyncContext context, string taskName) { IWebSvcSyncTask <T> task; if (!_tasks.TryGetValue(taskName, out task)) { throw new ArgumentException(@"Unknown task", "taskName"); } if (!task.IsTaskActive()) { throw new ApplicationException("Specified task not active now."); } PerformSyncProvider(context, svc => task.Sync( context, svc, _webConSvc.GetConfig().RetriesCount, context.AppendTaskIndicator(task.GetDisplayName()))); }
/// <summary> /// Запустить периодические задачи. /// </summary> public void SyncPeriodicTasks(ISyncContext context) { PerformSyncProvider(context, svc => GetPeriodicTaskNames() .Select(name => _tasks[name]) // Выбираем все периодические задачи .Where(task => task.IsTaskActive()) // Отфильтровываем неактивные .Select( task => new { Task = task, Indicator = context.AppendTaskIndicator(task.GetDisplayName()) }) // Создаем индикаторы .ToArray() // Сразу выполняем. чтобы все индикаторы добавились до начала синхронизации .ForEach( data => { data.Task.Sync(context, svc, _webConSvc.GetConfig().RetriesCount, data.Indicator); context.CheckState(); })); }