繁体   English   中英

RxJava异步缓存:处置replay()。autoConnect()的正确方法

[英]RxJava async cache: proper way to dispose replay().autoConnect() Observable

对于可观察的结果,我必须提供一个短暂的缓存。

查看选项,我看到以下内容:

  1. 缓存replay(1).refCount()并在数据准备好后缓存实际值。 缓存检索将检查实际数据并执行Observable.just或返回待处理的Observable或发起新请求。

  2. 缓存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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM