[英]RxJava async cache: proper way to dispose replay().autoConnect() Observable
对于可观察的结果,我必须提供一个短暂的缓存。
查看选项,我看到以下内容:
缓存replay(1).refCount()
并在数据准备好后缓存实际值。 缓存检索将检查实际数据并执行Observable.just
或返回待处理的Observable或发起新请求。
缓存replay(1).autoConnect(1)
并始终返回
后者似乎更直接,但是它有一个警告,当必须使缓存无效时,如何正确处理可观察的对象。
有一个签名:
public Observable<T> autoConnect(int numberOfSubscribers, Consumer<? super Disposable> connection)
但是很难告诉我如何跟踪未完成的订阅,以及是否可以进行处置将非常合适。
前者将负责资源的重新分配,但您必须产生更复杂的逻辑。
为什么不使用.cache()
?
public class CachedObservable<K,V> {
private Function<K, Observable<V>> actual;
private CachedObservable(Function<K, Observable<V>> actual){this.actual=actual;}
private final Map<K, Observable<V>> cacheMap = new ConcurrentHashMap<>();
public Observable<V> get(K key) {
return cacheMap.computeIfAbsent(key, k -> this.actual.call(k).cache());
}
public void invalidate(K key){cacheMap.remove(key);}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.