当前位置:
首页 >
rx 异步执行耗时_使用rx-java的异步抽象
发布时间:2023/12/3
69
豆豆
生活随笔
收集整理的这篇文章主要介绍了
rx 异步执行耗时_使用rx-java的异步抽象
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
rx 异步执行耗时
对我而言,使用Rx-java的一大好处是,无论底层调用是同步还是异步,因此代码看起来都完全相同,因此该条目的标题也是如此。
考虑一个非常简单的客户代码用例,它执行三个缓慢运行的调用并将结果合并到一个列表中:
由于呼叫是同步的,因此花费的时间会增加。 为了模拟慢速调用,以下是每个方法调用中的实现类型:
public String operation() {logger.info("Start: Executing slow task in Service 1");Util.delay(7000);logger.info("End: Executing slow task in Service 1");return "operation1" }因此,在这些实现中使用rx-java的第一个尝试是简单地让这些长时间运行的操作返回通用类型Observable ,一个糟糕的实现看起来像这样:
public Observable<string> operation() {logger.info("Start: Executing slow task in Service 1");Util.delay(7000);logger.info("End: Executing slow task in Service 1");return Observable.just("operation 1"); }因此,此调用者实现更改为以下内容:
Observable<String> op1 = service1.operation(); Observable<String> op2 = service2.operation(); Observable<String> op3 = service3.operation();Observable<List<String>> lst = Observable.merge(op1, op2, op3).toList();查看调用者如何使用merge方法组合结果。
但是,此时每个服务调用的调用仍是同步的,为了使调用中断,可以通过以下方式使用线程池进行服务调用:
public class Service1 {private static final Logger logger = LoggerFactory.getLogger(Service1.class);public Observable<String> operation() {return Observable.<String>create(s -> {logger.info("Start: Executing slow task in Service 1");Util.delay(7000);s.onNext("operation 1");logger.info("End: Executing slow task in Service 1");s.onCompleted();}).subscribeOn(Schedulers.computation());} }subscriptionOn使用指定的Scheduler运行实际操作。
该方法的优点在于,该服务的调用代码完全没有更改,那里的实现与以前完全相同,而服务调用现在是异步的。 如果您有兴趣进一步探索这个样本, 这里是一个GitHub库一起工作的例子。
翻译自: https://www.javacodegeeks.com/2015/02/async-abstractions-using-rx-java.html
rx 异步执行耗时
创作挑战赛新人创作奖励来咯,坚持创作打卡瓜分现金大奖总结
以上是生活随笔为你收集整理的rx 异步执行耗时_使用rx-java的异步抽象的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: ddos是上行还是下行流量(ddos是上
- 下一篇: hazelcast入门教程_Hazelc