我对如何在RxJava中使用Android应用程序(Kotlin)正确使用并行线程有一些疑问。我有这个应用程序,读取一些RSS源。用户请求使用此方法更新所有Feed:
override fun updateAllFeeds(): Completable {
return menu()
.map {
val feeds = mutableListOf<String>()
it.forEach { menuSection ->
menuSection.options.forEach { menuOption ->
menuOption.feed?.forEach { feed ->
if (!feeds.contains(feed)) feeds.add(feed)
}
}
}
feeds
}
.flatMapObservable {
// Get each item from List
Observable.fromIterable(it)
}
.flatMapCompletable { feedUrl ->
// Update each feed
rssDataStore.updateFeed(feedUrl)
}
}
稍后会使用Completable
:
val task = rssRepository.updateAllFeeds().subscribeOn(Schedulers.from(threadExecutor))
.observeOn(postExecutionThread.scheduler)
其中threadExecutor是ThreadPoolExecutor
,其中maximumPoolSize = 5。
我认为rssDataStore.updateFeed(feedUrl)部分将由于subscribeOn中使用的ThreadPoolExecutor
而并行执行,但在Logcat中我可以看到它一次只运行一个,顺序执行,更新最后一个Feed时会触发观察者onComplete
。有没有办法指定rssDataStore.updateFeed(feedUrl)应该并行执行,但只有在最后一个线程完成后才能获得onComplete
?