Rx2 blockingFirst() 不起作用
Rx2 blockingFirst() doesn't work
我在rx世界介绍,我想了解为什么订阅newThread时阻塞不起作用。例如:
这是有效的:
int i = Observable.fromArray(1,2,3,4).blockingFirst();
这不起作用:
int i = Observable.just(1,2,3,4)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread()).blockingFirst();
如果有可能使第二种情况有效。
谢谢 ;)
运算符observeOn(AndroidSchedulers.mainThread())
将在Android 应用程序的主线程中对所有要发出的项目进行排队。如果在主线程中执行上面的代码片段,线程将 block 在 blockingFirst
方法中,并且不会有任何机会执行项目的排队指令 - 它是僵局。
一般来说,在Rx代码中使用blocking
是一种反模式;保持反应模式并执行以下操作会更容易:
Observable
.just(1,2,3,4)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(i -> {...})
.subscribe();
我在rx世界介绍,我想了解为什么订阅newThread时阻塞不起作用。例如:
这是有效的:
int i = Observable.fromArray(1,2,3,4).blockingFirst();
这不起作用:
int i = Observable.just(1,2,3,4)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread()).blockingFirst();
如果有可能使第二种情况有效。
谢谢 ;)
运算符observeOn(AndroidSchedulers.mainThread())
将在Android 应用程序的主线程中对所有要发出的项目进行排队。如果在主线程中执行上面的代码片段,线程将 block 在 blockingFirst
方法中,并且不会有任何机会执行项目的排队指令 - 它是僵局。
一般来说,在Rx代码中使用blocking
是一种反模式;保持反应模式并执行以下操作会更容易:
Observable
.just(1,2,3,4)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(i -> {...})
.subscribe();