/// <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); } }