private IDisposable BindAvatars( IAvatarManager avatarManager, IObservable <Range> visibleRangeChanges) { var prevRange = new Range(0, 0); return(visibleRangeChanges .SelectMany(range => { var releases = avatarManager.ReleaseAvatars(_items, prevRange, range); var loads = avatarManager.LoadAvatars(_items, prevRange, range); return releases.Concat(loads); }) .SubscribeOn(TaskPoolScheduler.Default) .ObserveOn(RxApp.MainThreadScheduler) .Subscribe(action => action())); }
private IDisposable BindAvatarLoading( IObservable <VisibleRangeNotifiedArgs> visibleRangeChanges, IAvatarManager avatarManager) { var prevRange = new Range(0, 0); return(visibleRangeChanges .ObserveOn(TaskPoolScheduler.Default) .SubscribeOn(RxApp.MainThreadScheduler) .Subscribe(args => { var range = args.Range; avatarManager.ReleaseAvatars(_items, prevRange, range) .DisposeWith(_serviceDisposable); avatarManager.LoadAvatars(_items, prevRange, range) .DisposeWith(_serviceDisposable); prevRange = range; })); }