如何解决在可观察的消耗完成之前,如何阻止程序终止?
我目前正在尝试使用Monix限制api get请求。我已经尝试过使用STTP的Monix后端,并且工作正常,直到完成后无法关闭Monix后端为止。因为这似乎比Monix更像是一个sttp问题,所以我尝试通过以下方式重新解决该问题:使用sttp的默认后端,同时仍然使用Monix进行限制。
一旦我消耗了可观察的东西,我主要是在关闭monix后端上苦苦挣扎
我试图通过以下方法简化问题:
import monix.execution.Scheduler.Implicits.global
val someIter = List(Task(1),Task(2))
val obs: Observable[CancelableFuture[Int]] = Observable
.fromIterable(someIter)
.throttle(3.second,1)
.map(_.runToFuture)
但是,我仍然不确定在使用Observable之后如何关闭程序,因为它在这里过早终止(与monix后端的情况不同)...
换句话说,如何在Observable Iterable完成之前阻止终止程序?
解决方法
您可以创建Promise
,并在Observable
完成.doOnComplete
时完成它
并在主线程中等待它。
import monix.execution.Scheduler.Implicits.global
val someIter = List(Task(1),Task(2))
val promise = Promise()
val obs: Observable[CancelableFuture[Int]] = Observable.fromIterable(someIter).throttle(3.second,1)
.map(_.runToFuture)
.doOnComplete(Task { promise.complete(Success()) })
Await.ready(promise.future,Duration.Inf)
,
除了Artem接受的答案以及Monix Gitter community的见解之外,另一种可能的实现方式可能是:
val someIter = List(Task(1),Task(2))
val obs =
Observable
.fromIterable(someIter)
.throttle(1 second,10)
.mapParallelUnordered(10)(x => x.map(x => x.send().body)) // Here we send requests
.sumL // Sum just as an example
.runSyncUnsafe()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。