示例#1
0
 public bool TryRegister <TBackgroundTask>(IBackgroundTrigger trigger, BackgroundTaskParameters parameters) where TBackgroundTask : class, IBackgroundTask
 {
     return(TryRegister <TBackgroundTask>(trigger, Enumerable.Empty <IBackgroundCondition>(), parameters));
 }
示例#2
0
        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);
            }
        }
示例#3
0
        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);
        }