public void Initialize(Setting settings) { isTrackingEnabled = settings.TrackingEnabled; LoadAppLimits(); midnightNotifier.MidnightTick += OnMidnightTick; subscription = appChangedNotifier.AppChangedObservable .Where(a => appLimitsMap.Count > 0 && isTrackingEnabled) .Select(a => a.LogInfo.AppInfo.GetAppName()) .Do(n => { activeAppName = n; StopNotifiers(); }) .Where(n => appLimitsMap.ContainsKey(n)) .SelectMany(n => Observable.ToObservable(appLimitsMap[n])) .SelectMany(l => Observable.FromAsync(async() => { return(new { Limit = l, Duration = await appDurationCalc.GetDuration(l.Application.Name, l.LimitSpan) }); })) .Subscribe(r => CheckDuration(r.Limit, r.Duration)); }