mos*_*kis 4 rx-java rx-android reactivex rx-java2
我在rx世界中介绍,我想了解为什么在订阅newThread时阻塞不起作用.例如:
这是有效的:
int i = Observable.fromArray(1,2,3,4).blockingFirst();
Run Code Online (Sandbox Code Playgroud)
这不起作用:
int i = Observable.just(1,2,3,4)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread()).blockingFirst();
Run Code Online (Sandbox Code Playgroud)
如果有可能使第二种情况起作用.
谢谢 ;)
运算符observeOn(AndroidSchedulers.mainThread())将排队所有发出的项目以在Android应用程序的主线程中发出.如果你在主线程中执行上面的代码片段,线程将在方法中阻塞blockingFirst,并且没有机会执行项目的排队指令 - 这是一个死锁.
通常,blocking在Rx代码中使用是反模式; 更容易保持在被动模式并执行以下操作:
Observable
.just(1,2,3,4)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(i -> {...})
.subscribe();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2292 次 |
| 最近记录: |