public void Start() { var track = new Func <string, ImmutableList <Callback>, IDisposable>(Track).AsMemoized(); var deviceSubscriptions = new SerialCompositeDisposable(); var storageSubscription = _storage .GetAndObserve() .Do(data => deviceSubscriptions.Update(data.Value.Select(kvp => track(kvp.Key, kvp.Value)).ToImmutableList())) .Retry(TimeSpan.FromSeconds(5), _scheduler) .Subscribe(); _subscription.Disposable = new CompositeDisposable( storageSubscription, deviceSubscriptions, StorageScavenging()); }
/// <inheritdoc /> public IObservable <ApplicationSettings> GetAndObserveCurrent() { return(_dataPersister.GetAndObserve().Select(r => r.Value ?? ApplicationSettings.Default)); }