假设我有一个昂贵的计算来创建一个对象。我希望通过subscribeOn()
为调用者提供一些灵活性,以确定发生的位置。但由于副作用(例如,对象由某些外部数据存储支持),我也不想多次进行该计算。
我可以写
MyObject myObject = MyObject.createExpensively(params);
return Single.just(myObject);
但这会对调用线程进行昂贵的工作。
我可以写
Callable<MyObject> callable = () -> MyObject.createExpensively(params);
return Single.fromCallable(callable);
但这会在每次订阅时调用createExpensively()
(带副作用),如果有多个订阅者,这不是我想要的。
如果我想确保createExpensively()
只被调用一次,其副作用只发生一次,我在这里寻找的模式是什么?
答案 0 :(得分:1)
您可以使用Single.cache()
:
Single.fromCallable(() -> MyObject.createExpensively(params)).cache();
答案 1 :(得分:1)
Single.fromCallable(() -> MyObject.createExpensively(params)).cache();
cache() - &gt;存储当前Single中的成功值或异常,并将其重播到后期SingleObservers。有关详细信息,请查看here。