public bool TryRegister <TBackgroundTask>(IBackgroundTrigger trigger, BackgroundTaskParameters parameters) where TBackgroundTask : class, IBackgroundTask { return(TryRegister <TBackgroundTask>(trigger, Enumerable.Empty <IBackgroundCondition>(), parameters)); }
public bool TryRegister <TBackgroundTask>(IBackgroundTrigger trigger, IEnumerable <IBackgroundCondition> conditions, BackgroundTaskParameters parameters) where TBackgroundTask : class, IBackgroundTask { if (!IsInitialized) { return(false); } var name = GetTaskName <TBackgroundTask>(); try { #if DEBUG var registration = BackgroundTaskRegistration.AllTasks.Values.FirstOrDefault(t => t.Name == name); if (registration != null) { Logger.Current.Info($"Unregister background task '{name}'"); registration.Unregister(true); } #endif if (!IsTaskRegistered(name)) { var entryPoint = GetTaskEntryPoint <TBackgroundTask>(); var builder = CreateTaskBuilder(name, entryPoint, trigger, conditions, parameters); builder.Register(); Logger.Current.Info($"Register background task '{name}'"); return(true); } else { Logger.Current.Info($"Background task '{name}' already registered"); return(true); } } catch (Exception e) { Logger.Current.Error($"Cannot register background task '{name}'", e); return(false); } }
private BackgroundTaskBuilder CreateTaskBuilder(string name, string entryPoint, IBackgroundTrigger trigger, IEnumerable <IBackgroundCondition> conditions, BackgroundTaskParameters parameters) { var builder = new BackgroundTaskBuilder { Name = name, CancelOnConditionLoss = parameters.HasFlag(BackgroundTaskParameters.CancelOnConditionLoss), IsNetworkRequested = parameters.HasFlag(BackgroundTaskParameters.IsNetworkRequested), }; if (parameters.HasFlag(BackgroundTaskParameters.IsOutProcess)) { builder.TaskEntryPoint = entryPoint; } builder.SetTrigger(trigger); foreach (var condition in conditions) { builder.AddCondition(condition); } return(builder); }