Kotlin subscribeOn(Schedulers.io())不工作,但subscribeOn(Schedulers.trampoline())不工作 fun main(){ 单身。只是(“一汽”) .subscribeOn(Schedulers.trampoline()) .地图{ println(“线程${thread.currentThread().name}中的映射”) } .平面图{ return@flatMap单人间。只有(231)。地图{ println(“线程${thread.currentThread().name}中的映射”) return@map信息技术 } } .订阅({ println(it) }, { println(it) }) }

Kotlin subscribeOn(Schedulers.io())不工作,但subscribeOn(Schedulers.trampoline())不工作 fun main(){ 单身。只是(“一汽”) .subscribeOn(Schedulers.trampoline()) .地图{ println(“线程${thread.currentThread().name}中的映射”) } .平面图{ return@flatMap单人间。只有(231)。地图{ println(“线程${thread.currentThread().name}中的映射”) return@map信息技术 } } .订阅({ println(it) }, { println(it) }) },kotlin,rx-java,rx-java2,Kotlin,Rx Java,Rx Java2,打印出: map in thread main map in thread main 231 但是 fun main(){ 单身。只是(“一汽”) .subscribeOn(Schedulers.io()) .地图{ println(“线程${thread.currentThread().name}中的映射”) } .平面图{ return@flatMap单人间。只有(231)。地图{ println(“线程${thread.currentThread().name}中的映射”) return

打印出:

map in thread main
map in thread main
231
但是

fun main(){
单身。只是(“一汽”)
.subscribeOn(Schedulers.io())
.地图{
println(“线程${thread.currentThread().name}中的映射”)
}
.平面图{
return@flatMap单人间。只有(231)。地图{
println(“线程${thread.currentThread().name}中的映射”)
return@map信息技术
}
}
.订阅({
println(it)
}, {
println(it)
})
}
什么都不输出

subscribeOn(Schedulers.computation())
subscribeOn(Schedulers.newThread())
也不起作用


为什么?

程序在代码执行之前退出。订阅后尝试睡眠或输入打印语句

fun main(){
单身。只是(“一汽”)
.subscribeOn(Schedulers.io())
.地图{
println(“线程${thread.currentThread().name}中的映射”)
}
.平面图{
return@flatMap单人间。只有(231)。地图{
println(“线程${thread.currentThread().name}中的映射”)
return@map信息技术
}
}
.订阅({
println(it)
}, {
println(it)
})
println(“刚刚在上一次声明中订阅!”)
线程。睡眠(500)
println(“正在退出主线程…”)
}
蹦床的输出是

map in thread main
map in thread main
231
just subscribed in last statement!
exiting main thread...
对于在不同线程中执行“工作”的其他调度程序(如
.io()
.computation()
),其输出如下:

just subscribed in last statement!
map in thread RxComputationThreadPool-1
map in thread RxComputationThreadPool-1
231
exiting main thread...

另外,
io()
调度程序可以看作是无限线程池,
computation()
可以看作是有界线程池。

非常感谢,不久前我还问了关于Kotlin Flow的类似问题。愚蠢的我