由于Schedulers.trampoline()使作业在当前线程上工作,我无法找到案例与Schedulers.trampoline()没有调度程序设置的情况之间的区别.
使用Schedulers.trampoline():
Observable.from(1, 2, 3)
.observeOn(Schedulers.trampoline())
.subscribe(System.out::println)
Run Code Online (Sandbox Code Playgroud)
不使用调度程序:
Observable.from(1, 2, 3)
.subscribe(System.out::println)
Run Code Online (Sandbox Code Playgroud)
我认为上面的代码行为相同.我真的很想知道为什么Schedulers.trampoline()存在于RxJava的API中.
在什么情况下,我应该使用Schedulers.trampoline()?
Han*_*rst 10
您在observeOn/subscribeOn中使用调度程序不会获得任何好处.您可以使用调度程序中的Worker来安排下班后的工作.
请看一下这个例子.我正在使用RxJava2-RC5
@Test
public void trampoline() throws Exception {
Scheduler scheduler = Schedulers.trampoline();
Scheduler.Worker worker = scheduler.createWorker();
Runnable r1 = () -> {
System.out.println("Start: r1");
System.out.println("End: r1");
};
Runnable r2 = () -> {
System.out.println("Start: r2");
worker.schedule(r1);
System.out.println("End: r2");
};
worker.schedule(r2);
}
Run Code Online (Sandbox Code Playgroud)
输出:
开始:r2结束:r2开始:r1结束:r1
如果你以递归的方式安排工作,蹦床工作人员会派上用场,因为你不会得到和StackOverFlow.
该示例从introtorx重新描述为RxJava(http://www.introtorx.com/content/v1.0.10621.0/15_SchedulingAndThreading.html)
| 归档时间: |
|
| 查看次数: |
4703 次 |
| 最近记录: |