Esempio n. 1
0
        /// <summary>
        /// Syncs the currently registered <see cref="IBackgroundTask"/>s on the given <see cref="IBackgroundService"/> to match a collection of <see cref="IBackgroundTask"/>s.
        /// </summary>
        /// <param name="service">The <see cref="IBackgroundService"/> used for registering/unregistering background tasks.</param>
        /// <param name="tasks">The desired collection of <see cref="IBackgroundTask"/>s to register.</param>
        public static async Task RegisterCollectionAsync(this IBackgroundService service, IEnumerable <IBackgroundTask> tasks)
        {
            var toRemove = service.CurrentlyRegistered.Where(r => !tasks.Any(t => t.Id == r)).ToArray();
            var toAdd    = tasks.Where(t => !service.CurrentlyRegistered.Any(r => r == t.Id)).ToArray();

            foreach (var name in toRemove)
            {
                service.UnRegister(name);
            }

            foreach (var task in toAdd)
            {
                await service.RegisterAsync(task);
            }
        }