rx 异步执行耗时_使用rx-java的异步抽象
rx 異步執(zhí)行耗時(shí)
對(duì)我而言,使用Rx-java的一大好處是,無(wú)論底層調(diào)用是同步還是異步,因此代碼看起來(lái)都完全相同,因此該條目的標(biāo)題也是如此。
考慮一個(gè)非常簡(jiǎn)單的客戶代碼用例,它執(zhí)行三個(gè)緩慢運(yùn)行的調(diào)用并將結(jié)果合并到一個(gè)列表中:
由于呼叫是同步的,因此花費(fèi)的時(shí)間會(huì)增加。 為了模擬慢速調(diào)用,以下是每個(gè)方法調(diào)用中的實(shí)現(xiàn)類型:
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" }因此,在這些實(shí)現(xiàn)中使用rx-java的第一個(gè)嘗試是簡(jiǎn)單地讓這些長(zhǎng)時(shí)間運(yùn)行的操作返回通用類型Observable ,一個(gè)糟糕的實(shí)現(xiàn)看起來(lái)像這樣:
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"); }因此,此調(diào)用者實(shí)現(xiàn)更改為以下內(nèi)容:
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();查看調(diào)用者如何使用merge方法組合結(jié)果。
但是,此時(shí)每個(gè)服務(wù)調(diào)用的調(diào)用仍是同步的,為了使調(diào)用中斷,可以通過(guò)以下方式使用線程池進(jìn)行服務(wù)調(diào)用:
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運(yùn)行實(shí)際操作。
該方法的優(yōu)點(diǎn)在于,該服務(wù)的調(diào)用代碼完全沒(méi)有更改,那里的實(shí)現(xiàn)與以前完全相同,而服務(wù)調(diào)用現(xiàn)在是異步的。 如果您有興趣進(jìn)一步探索這個(gè)樣本, 這里是一個(gè)GitHub庫(kù)一起工作的例子。
翻譯自: https://www.javacodegeeks.com/2015/02/async-abstractions-using-rx-java.html
rx 異步執(zhí)行耗時(shí)
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的rx 异步执行耗时_使用rx-java的异步抽象的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ddos是上行还是下行流量(ddos是上
- 下一篇: hazelcast入门教程_Hazelc