我正在使用Retrofit为异步网络调用返回rxjava Observable。
我发现自己在重复以下调用:
someApiCall().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
似乎我一直在订阅IO线程,并在Android主线程上进行观察。这似乎是我发现的所有资源都倡导的最佳实践。也许除了长时间运行的计算外,我不太了解何时要偏离此模式。
有没有一种方法可以通过默认subscriptionOn和observeOn线程来删除此样板?
这是rxjava插件的用例吗?(我找不到它们使用的许多示例。)
是否可以通过与改造执行程序混淆来在网络边界设置默认线程?
对于Observable
响应,Retrofit当前将设置subscribeOn
为的HTTP执行程序RestAdapter
(提供的或默认的)。这样做是为了将RxJava支持推入现有行为。
2.0的计划是提供为这两个值subscribeOn
和observeOn
显式设置默认值的能力(无论是默认值,还是只有一个,或者都不是)。
例如,如果您需要将多个API调用链接在一起,则您不希望始终希望在主线程上进行观察的一个原因。
问题内容: 我正在使用Retrofit为异步网络调用返回rxjava Observable。 我发现自己在重复以下调用: 似乎我一直在订阅IO线程,并在Android主线程上进行观察。这似乎是我发现的所有资源都倡导的最佳实践。也许除了长时间运行的计算外,我不太了解何时要偏离此模式。 有没有一种方法可以通过默认subscriptionOn和observeOn线程来删除此样板? 这是rxjava插件的
我的理解是,旨在并发运行其参数,并且当协同程序执行等待表达式时,它为事件循环提供了安排其他任务的机会。考虑到这一点,我惊讶地发现下面的代码片段忽略了的一个输入。 据我所知,会发生以下事情: run(main())对事件循环执行任何必要的全局初始化,并安排main()执行。 实际上,这不是我观察到的。相反,整个程序相当于。我发现非常有趣的是,即使是代码的微小变化似乎也会重新引入公平。例如,如果我们有
我们有一个使用Spring Framework在Tomcat中运行的Web应用程序。我们需要为循环操作添加一些计划作业。为此,我们遇到了Quartz Scheduler,并遵循了使用Quartz with Spring配置作业的教程,并按预期计划并运行了作业。 所以我们有一些任务是在应用程序启动时安排的。现在我们希望用户手动运行作业并更改作业的触发器,但是我们需要将这些更改持久化到数据库中。因此,
在RxJava中,有5种不同的调度程序可供选择: > immediate():创建并返回在当前线程上立即执行工作的调度程序。 trampoline():创建并返回一个调度程序,该调度程序将当前线程上的工作排队,以便在当前工作完成后执行。 newThread():创建并返回一个调度程序,该调度程序为每个工作单元创建一个新线程。 计算():创建并返回一个用于计算工作的调度程序。这可以用于事件循环、处理
问题内容: 在Akka文档中指出,如果未配置调度程序,则将使用默认调度程序。默认调度程序的属性是什么,即并行度最小值,并行度因子,并行度最大值等? 问题答案: 默认情况下,提供的调度程序是带有的调度程序,并且默认的并行度值为: 最小并行度: 8 并行因子: 3.0 最大并行度: 64 您可以在文档中看到所有这些信息。 有一个节名为: 参考配置清单 这是配置文件的相关部分(我只删除了注释):
我必须根据传入的请求写入文件。由于多个请求可能同时出现,我不希望多个线程试图一起覆盖文件内容,这可能会导致丢失一些数据。 因此,我尝试使用实例变量PublishSubject收集所有请求的数据。我在初始化期间订阅了publishSubject,此订阅将在应用程序的整个生命周期内保持不变。此外,我还在一个单独的线程(由Vertx事件循环提供)上观察到相同的实例,该线程调用负责编写文件的方法。 稍后在