RxJava中的并行性

时间:2018-04-08 22:38:10

标签: android concurrency parallel-processing kotlin rx-java2

我对如何在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

0 个答案:

没有答案